如何使用pip将Python包安装到不同目录?
我知道最简单的办法是使用virtualenv和virtualenvwrapper,但由于各种原因,我不能或不想这么做。
那么,我该如何修改这个命令
pip install package_name
让pip
把软件包安装到默认的site-packages
以外的地方呢?
20 个回答
我发现,设置 PYTHONUSERBASE
这个环境变量比使用 --target
或 --install-options
选项更有效。这是根据一个关于这个问题的 讨论 得出的结论:
PYTHONUSERBASE=/path/to/install/to pip install --user
(或者在运行命令之前,使用 export PYTHONUSERBASE=/path/to/install/to
来设置你的环境中的 PYTHONUSERBASE
目录)
这样做会使用非常有用的 --user
选项,但会告诉它在一个自定义的前缀下创建 bin
、lib
、share
和其他你期望的目录,而不是默认的 $HOME/.local
。
然后,你可以像对待普通安装目录一样,将这个目录添加到你的 PATH
、PYTHONPATH
和其他变量中。
注意,如果有任何依赖的包需要在 PYTHONUSERBASE
目录中安装更新版本,你可能还需要指定 --upgrade
和 --ignore-installed
选项,以覆盖系统提供的版本。
完整示例
PYTHONUSERBASE=/opt/mysterypackage-1.0/python-deps pip install --user --upgrade numpy scipy
..例如,要将最新版本的 scipy
和 numpy
包安装到一个目录中,然后你可以像这样将其包含在你的 PYTHONPATH
中(这个例子使用的是 CentOS 6 上的 bash 和 Python 2.6):
export PYTHONPATH=/opt/mysterypackage-1.0/python-deps/lib64/python2.6/site-packages:$PYTHONPATH
export PATH=/opt/mysterypackage-1.0/python-deps/bin:$PATH
使用 virtualenv 仍然是一个更好、更整洁的解决方案!
你需要的就是 --target 这个选项:
pip install --target d:\somewhere\other\than\the\default package_name
不过,你还需要把 d:\somewhere\other\than\the\default
加到 PYTHONPATH
里,这样才能从那个位置使用这些包。
-t, --target <dir>
把包安装到 <dir> 目录下。默认情况下,这不会替换 <dir> 里已有的文件或文件夹。
如果想用新版本替换 <dir> 里的已有包,可以使用 --upgrade。
如果没有这个目标选项,可以升级 pip:
在 Linux 或 OS X 上:
pip install -U pip
在 Windows 上(这个方法可以解决 一个问题):
python -m pip install -U pip
使用:
pip install --install-option="--prefix=$PREFIX_PATH" package_name
你可能还想用 --ignore-installed
这个选项,强制所有依赖项重新安装,使用这个新的前缀。你可以多次使用 --install-option
来添加任何你可以在 python setup.py install
时使用的选项(--prefix
可能是你想要的,但还有很多其他选项可以使用)。