我知道明显的答案是使用virtualenv和virtualenvwrapper,但出于各种原因我不能/不想这样做。
那么如何修改命令
pip install package_name
使pip
将软件包安装在默认site-packages
以外的某个位置?
答案 0 :(得分:422)
--target开关是您正在寻找的东西:
pip install --target=d:\somewhere\other\than\the\default package_name
但您仍然需要将d:\somewhere\other\than\the\default
添加到PYTHONPATH
才能在该位置实际使用它们。
-t, - target< dir>
将软件包安装到< dir>中。默认情况下,这不会替换< dir>中的现有文件/文件夹 使用--upgrade替换< dir>中的现有包新版本。
如果目标切换不可用,则升级pip:
在Linux或OS X上:
pip install -U pip
在Windows上(这适用于an issue):
python -m pip install -U pip
答案 1 :(得分:303)
使用:
pip install --install-option="--prefix=$PREFIX_PATH" package_name
您可能还希望使用--ignore-installed
强制使用此新前缀重新安装所有依赖项。您可以多次使用--install-option
来添加可以与python setup.py install
一起使用的任何选项(--prefix
可能是您想要的,但您可以使用更多选项)。
答案 2 :(得分:58)
而不是--target
选项或--install-options
选项,我发现以下效果很好(通过讨论https://github.com/pypa/pip/issues/446处关于此事的错误):
PYTHONUSERBASE=/path/to/install/to pip install --user
(或者在运行命令之前在您的环境中设置PYTHONUSERBASE
目录,使用export PYTHONUSERBASE=/path/to/install/to
)
这会使用非常有用的--user
选项,但会告诉它在自定义前缀下制作bin
,lib
,share
和其他目录,而不是$HOME/.local
。
然后,您可以将其添加到PATH
,PYTHONPATH
和其他变量,就像正常安装目录一样。
请注意,如果任何依赖于此类的软件包需要在--upgrade
目录中安装较新版本,则可能还需要指定--ignore-installed
和PYTHONUSERBASE
选项。覆盖系统提供的版本。
一个完整的例子:
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仍然是一个更好,更整洁的解决方案!
答案 3 :(得分:42)
安装Python包通常只包含一些纯Python文件。如果软件包包含数据,脚本和/或可执行文件,它们将安装在与纯Python文件不同的目录中。
假设您的软件包没有数据/脚本/可执行文件,并且您希望Python文件进入/python/packages/package_name
(而不是使用/python/packages
以下--prefix
以下的某些子目录}),您可以使用一次性命令:
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
等,否则包中包含的任何excecutables / data / scripts仍会转到默认位置查看custom installation选项。
答案 4 :(得分:27)
要将库安装到我想要的地方,我导航到我想要终端的目录然后使用
pip install mylibraryName -t .
我从这个页面中获取的逻辑:https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download
答案 5 :(得分:17)
似乎没有人提到-t选项,但最简单:
pip install -t <direct directory> <package>
答案 6 :(得分:14)
只需在@Ian Bicking的回答中添加一点:
如果想要在远程服务器上将某个Python软件包安装到一个主目录(没有sudo用户权限),使用--user
选项指定已安装的目录也是有用的。
,例如,
pip install --user python-memcached
该命令会将软件包安装到PYTHONPATH中列出的其中一个目录中。
答案 7 :(得分:12)
较新版本的pip
(8或更高版本)可以直接使用--prefix
option:
pip install --prefix=$PREFIX_PATH package_name
其中$PREFIX_PATH
是放置lib,bin和其他顶级文件夹的安装前缀。
答案 8 :(得分:8)
使用python3.5和pip 9.0.3测试了这些选项:
pip install --target / myfolder [程序包]
在/ 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 install --user [packages]
将软件包安装到$ HOME中: /home/[USER]/.local/lib/python3.5/site-packages Python从此.local路径自动搜索,因此您无需将其放入PYTHONPATH。
=>在大多数情况下,--user是最佳选择。 如果由于某种原因无法使用主文件夹,请使用--prefix。
答案 9 :(得分:8)
pip install packageName -t pathOfDirectory
或
pip install packageName --target pathOfDirectorty
答案 10 :(得分:8)
答案 11 :(得分:3)
要添加已经很好的建议,因为当我没有/usr/local
的写入权限时,我遇到了安装IPython的问题。
pip使用distutils进行安装,this thread讨论了如何导致问题,因为它依赖于sys.prefix
设置。
我的问题发生在IPython安装尝试使用 Permission denied 写入'/ usr / local / share / man / man1'时。由于安装失败,它似乎没有在bin目录中写入IPython文件。
使用“--user”工作,文件写入〜/ .local。将〜/ .local / bin添加到$ PATH意味着我可以从那里使用“ipython”。
但是我正在尝试为许多用户安装它,并且已获得/usr/local/lib/python2.7
目录的写入权限。我在那里创建了一个“bin”目录并为distutils设置了指令:
vim ~/.pydistutils.cfg
[install]
install-data=/usr/local/lib/python2.7
install-scripts=/usr/local/lib/python2.7/bin
然后(-I
用于强制安装,尽管以前的失败/ .local安装):
pip install -I ipython
然后我将/usr/local/lib/python2.7/bin
添加到$PATH
。
我认为我会将其包括在内以防其他人在没有sudo访问权限的计算机上遇到类似问题。
答案 12 :(得分:0)
我建议按照文档编写〜/ .pip / pip.conf文件。请注意文档中缺少指定的头目录,这会导致以下错误:
error: install-base or install-platbase supplied, but installation scheme is incomplete
conf文件的完整工作内容是:
[install]
install-base=$HOME
install-purelib=python/lib
install-platlib=python/lib.$PLAT
install-scripts=python/scripts
install-headers=python/include
install-data=python/data
不幸的是我可以安装,但是当试图卸载pip时告诉我没有这样的软件包用于卸载过程....所以有些东西仍然是错误的,但是软件包会进入预定位置。
答案 13 :(得分:0)
在Python v1.5.6
(GNU / Linux)上使用pip v2.7.3
,选项--root
允许指定全局安装前缀(显然),而不管特定包的选项如何。试试f.i。,
$ pip install --root=/alternative/prefix/path package_name
答案 14 :(得分:0)
不幸的是,如果您将brew与python一起使用,则pip / pip3附带的选项非常有限。您没有如上所述的--install-option,--target和--user选项。
Note进行pip安装--user
正常的pip install --user对于酿造的Python禁用。这是由于distutils中的错误,因为Homebrew编写了一个distutils.cfg来设置软件包前缀。 可能的解决方法(将可执行脚本放入〜/ Library / Python /./ bin中)是:python -m pip install --user --install-option="--prefix=" <package-name>
您可能会觉得这行很麻烦。我建议使用pyenv进行管理。 如果您使用
brew upgrade python python3
具有讽刺意味的是,您实际上是降级点功能。
(我发布此答案的原因仅是因为我的Mac osx中的pip没有--target选项,而且我花了数小时来修复它)
答案 15 :(得分:0)
pip install /path/to/package/
了。
与-e
或--editable
标志的区别在于-e
链接到软件包的保存位置(即您的下载文件夹),而不是将其安装到python中路径。
这意味着,如果您将软件包删除/移动到另一个文件夹,则将无法使用它。
答案 16 :(得分:0)
system` 选项,它将安装 pip package-bins 到所有用户都可以访问的 /usr/local/bin。没有此选项的安装可能不适用于所有用户,因为事情会转到用户特定的目录,如 $HOME/.local/bin 然后是用户特定的安装,必须为所有用户重复安装,如果未设置,也可能存在路径问题对于用户,垃圾箱将不起作用。因此,如果您正在寻找所有用户 - 您需要具有 sudo 访问权限:
sudo su -
python3 -m pip install --system <module>
logout
log back in
which <module-bin> --> it should be installed on /usr/local/bin/