使用pip将Python包安装到不同的目录中?

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

那么如何修改这个命令

pip install package_name 

使pip安装在默认site-packages以外的地方site-packages

使用:

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

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

–target开关是你正在寻找的东西:

pip install –target = d:\ somewhere \ other \ than \ default \ package_name

但是您仍然需要将d:\somewhere\other\than\the\default添加d:\somewhere\other\than\the\default PYTHONPATH以从该位置实际使用它们。


如果目标交换机不可用,请升级pip:

在Linux或OS X上:

 pip install -U pip 

在Windows上(这可以解决一个问题 ):

 python -m pip install -U pip 

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

假设你的软件包没有数据/脚本/可执行文件,并且你希望你的Python文件进入/python/packages/package_name (而不是像使用--prefix时在/python/packages下面的几个级别),你可以使用一次性命令:

 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等),否则包中包含的任何可执行文件/数据/脚本仍然会转到其默认位置,以查看自定义安装选项)。

而不是--target选项或--install-options选项,我发现以下方法效果很好(从https://github.com/pypa/pip/issues/446讨论关于这个问题的错误):;

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

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

这使用非常有用的--user选项,但是告诉它使用自定义前缀而不是$HOME/.local创buildbinlibshare和其他目录。

然后,您可以将它添加到您的PATHPYTHONPATH和其他variables中,就像您正常的安装目录一样。

请注意,如果任何与此相关的包需要在PYTHONUSERBASE目录中安装较新的版本,则可能需要指定--upgrade--ignore-installed选项来覆盖系统提供的版本。

一个完整的例子:

 PYTHONUSERBASE=/opt/mysterypackage-1.0/python-deps pip install --user --upgrade numpy scipy 

..将scipynumpy软件包的最新版本安装到一个目录中,然后你可以像这样在你的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仍然是一个更好,更好的解决scheme!

只需添加一点@Ian Bicking的答案:

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

例如,

 pip install --user python-memcached 

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

为了点击安装一个图书馆我想要的地方,我导航到我想要的目录与terminal然后使用的位置

 pip install mylibraryName -t . 

我从这个页面获取的逻辑: https : //cloud.google.com/appengine/docs/python/googlecloudstorageclient/download

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

 pip install --prefix=$PREFIX_PATH package_name 

其中$PREFIX_PATH是放置lib,bin和其他顶级文件夹的安装前缀。

使用Python v2.7.3 (GNU / Linux)上的pip v1.5.6 ,选项--root允许指定一个全局安装前缀(显然),而不考虑特定软件包的选项。 尝试fi,

 $ pip install --root=/alternative/prefix/path package_name 

添加已经很好的build议,因为当我没有对/usr/local写入权限时,安装IPython时出现问题。

pip使用distutils来完成它的安装, 这个线程讨论了它如何导致一个问题,因为它依赖于sys.prefix设置。

当IPython安装尝试写入“/ usr / local / share / man / man1”并且Permission denied时,发生了我的问题。 由于安装失败,似乎没有在bin目录中写入IPython文件。

使用“–user”工作,文件被写入〜/ .local。 将〜/ .local / bin添加到$ PATH意味着我可以从那里使用“ipython”。

不过,我正在尝试为许多用户安装此程序,并且已经获得了/usr/local/lib/python2.7目录的写入权限。 我在那里创build了一个“bin”目录,并设置distutils的指令:

 vim ~/.pydistutils.cfg [install] install-data=/usr/local/lib/python2.7 install-scripts=/usr/local/lib/python2.7/bin 

然后( -I用于强制安装,而不pipe以前的失败/ .local安装):

 pip install -I ipython 

然后我添加/usr/local/lib/python2.7/bin$PATH

我想我会包括这种情况下,任何人有一个机器,他们没有sudo访问类似的问题。