使用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
创buildbin
, lib
, share
和其他目录。
然后,您可以将它添加到您的PATH
, PYTHONPATH
和其他variables中,就像您正常的安装目录一样。
请注意,如果任何与此相关的包需要在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仍然是一个更好,更好的解决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访问类似的问题。