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

那么如何修改命令呢

pip install package_name

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


当前回答

PIP install /path/to/package/

现在是可能的。

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

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

其他回答

在@Ian Bicking的回答上再加一点:

如果想在远程服务器上的主目录(没有sudo用户权限)中安装一些Python包,使用——user选项指定安装目录也可以。

例如,

pip install --user python-memcached

该命令将包安装到PYTHONPATH中列出的目录之一。

而不是——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仍然是一个更好、更整洁的解决方案!

安装Python包通常只包含一些纯Python文件。如果包包含数据、脚本和(或)可执行文件,则这些文件将安装在与纯Python文件不同的目录中。

假设你的包没有数据/脚本/可执行文件,并且你希望你的Python文件进入/ Python /packages/package_name(而不是像使用——prefix时那样在/ Python /packages下面几层的子目录),你可以使用one time命令:

pip install --install-option="--install-purelib=/python/packages" package_name

如果你想要所有(或大部分)你的包都在那里,你可以编辑你的~/.pip/pip.conf包含:

[install]
install-option=--install-purelib=/python/packages

这样,您就不会忘记必须一次又一次地指定它。

包中包含的任何可执行文件/数据/脚本仍然会放在默认位置,除非你指定了额外的安装选项(——prefix/——install-data/——install-scripts等,详情请参阅自定义安装选项)。

pip install packageName -t pathOfDirectory

or

pip install packageName --target pathOfDirectorty

新版本的pip(8或更高版本)可以直接使用——prefix选项:

pip install --prefix=$PREFIX_PATH package_name

其中$PREFIX_PATH是lib、bin和其他顶级文件夹所在的安装前缀。