我知道最明显的答案是使用virtualenv和virtualenvwrapper,但由于各种原因,我不能/不想这样做。

那么如何修改命令呢

pip install package_name

让PIP在默认的site-packages之外的地方安装这个包?


当前回答

而不是——target或——install-options选项,我发现设置PYTHONUSERBASE环境变量工作得很好(来自关于这个问题的bug的讨论):

PYTHONUSERBASE=/path/to/install/to pip install --user

(或者在运行命令之前设置环境中的PYTHONUSERBASE目录,使用export PYTHONUSERBASE=/path/to/install/to)

这使用了非常有用的——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中(本例中使用bash和CentOS 6上的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仍然是一个更好、更整洁的解决方案!

其他回答

Use:

pip install --install-option="--prefix=$PREFIX_PATH" package_name

您可能还想使用——ignore-installed强制使用这个新前缀重新安装所有依赖项。你可以多次使用——install-option来添加任何你可以在python setup.py install中使用的选项(——prefix可能是你想要的,但你可以使用更多的选项)。

PIP install /path/to/package/

现在是可能的。

这与使用-e或——editable标志的区别在于-e链接到包的保存位置(即下载文件夹),而不是将其安装到python路径中。

这意味着如果您删除/移动包到另一个文件夹,您将无法使用它。

而不是——target或——install-options选项,我发现设置PYTHONUSERBASE环境变量工作得很好(来自关于这个问题的bug的讨论):

PYTHONUSERBASE=/path/to/install/to pip install --user

(或者在运行命令之前设置环境中的PYTHONUSERBASE目录,使用export PYTHONUSERBASE=/path/to/install/to)

这使用了非常有用的——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中(本例中使用bash和CentOS 6上的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仍然是一个更好、更整洁的解决方案!

使用python3.5和pip 9.0.3测试这些选项:

PIP install——target /myfolder [packages]

安装所有包,包括/myfolder下的依赖项。没有考虑到Python中已经在其他地方安装了依赖包。您将在/myfolder/[package_name]中找到包。如果你有多个Python版本,这不会考虑到这一点(包文件夹名中没有Python版本)。

PIP install——prefix /myfolder [packages]

检查是否已经安装了依赖项。将包安装到/myfolder/lib/python3.5/site-packages/[packages]

PIP install——root /myfolder [packages]

检查依赖项,如——prefix,但安装位置将是/myfolder/usr/local/lib/python3.5/site-packages/[package_name]。

PIP安装——用户[包]

将包安装到$HOME: /home/[用户]/。local / lib / python3.5 /网站 Python自动从这个.local路径搜索,所以你不需要把它放在你的PYTHONPATH中。

在大多数情况下——user是最好的选择。 以防主文件夹不能使用,因为一些原因,然后-前缀。

不幸的是,如果您在python中使用brew, pip/pip3附带的选项非常有限。你没有上面提到的——install-option,——target,——user选项。

注意pip install——user 对于已酿造的Python,禁用了正常的pip install——user。这是因为distutils中的一个错误,因为Homebrew编写了一个distutils.cfg来设置包前缀。 一个可能的解决方案(将可执行脚本放在~/Library/Python/./bin中)是: Python -m PIP install——user——install-option="——prefix=" <package-name>

您可能会发现这一行非常麻烦。我建议使用pyenv进行管理。 如果你正在使用

编译升级python python3

讽刺的是,你实际上降低了pip的功能。

(我发布这个答案,只是因为我的mac osx中的pip没有目标选项,我花了几个小时来修复它)