那么我该如何修改命令
pip install package_name
使
pip
将软件包安装在默认site-packages
之外的其他位置?#1 楼
使用:pip install --install-option="--prefix=$PREFIX_PATH" package_name
您可能还希望使用
--ignore-installed
强制使用此新前缀重新安装所有依赖项。您可以多次使用--install-option
来添加可以与python setup.py install
一起使用的任何选项(--prefix
可能是您想要的,但还有很多其他选项可以使用)。评论
如果这样做,是否有办法冻结点子以查看备用目录?
–俄罗斯
2011年7月22日在6:54
pip冻结将在路径上查找,因此,如果您喜欢PYTHONPATH = $ PREFIX_PATH / lib / python2.6 / site-packages,则pip冻结应会看到它们。
–伊恩·比金(Ian Bicking)
2011年8月3日在20:53
使用--prefix = $ PREFIX_PATH似乎并不能完全控制安装目录,因为会附加系统特定的后缀(例如Windows上的\ Lib \ site-packages)。有没有办法指定特定目录?
–彼得·多布罗格斯特
2012年6月2日22:04
@Piotr:是的,有我的答案。使用'--prefix'有点粗略,但是如果您希望纯python放在/usr/lib/pythonX.Y/site-packages而不是/usr/local/lib/pythonX.Y/site-packages下,效果很好包。
–安东
2012年6月13日14:39
4年前的答案还不错,但是--target选项现在存在。
– Tritium21
2014-09-28 18:20
#2 楼
--target开关是您要查找的东西: pip install --target=d:\somewhere\other\than\the\default package_name
但是仍然需要将
d:\somewhere\other\than\the\default
添加到PYTHONPATH
才能从该位置实际使用它们。-t,--target
将软件包安装到
使用--upgrade将
如果目标开关不可用,请升级pip:
在Linux或OS X上:
pip install -U pip
在Windows上(这可以解决问题) :
python -m pip install -U pip
评论
@DanH运行pip install-升级pip!
–r3m0t
2014年3月19日下午16:51
这是真正的答案,只是在接受的答案之后添加了很多选项。
–布克佐
2014年4月6日在17:57
@Ian Bicking提到的--install-option =“-prefix = $ PREFIX_PATH”和--target = $ PATH选项之间有什么区别?
– Hibou57
2014年8月15日15:49
target是一个pip选项,您放入install-option中的所有内容都将传递给setup.py install命令。基本上目标是自定义站点包位置。
– Janusz Skonieczny
2014年8月18日在9:19
使用--target可能会导致部分安装,因为它不会在指定的前缀中安装任何包含脚本/数据文件的文件。似乎将--prefix与--install-option一起传递是完全控制使用的安装前缀的唯一正确方法。
–肯尼斯·赫斯特(Kenneth Hoste)
15年1月26日在11:11
#3 楼
代替--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
a nd 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仍然是更好,更整洁的解决方案!
评论
这适用于在Docker容器上运行的Travis CI,而--install-option =“-prefix = $ PREFIX_PATH”解决方案则不能。
– 32位
2015年8月9日在21:34
Noobie问题,pbin创建的/ bin文件夹有多重要,--user和--PREFIX一样创建,而--target则没有。
–乔纳森
16-09-27在14:13
如果软件包安装在全局Python中,则需要--ignore-installed。
–乔治·索维托夫(George Sovetov)
17年1月17日11:35
此选项还与--editable和本地安装兼容。
– mdh
17-2-27在13:57
此选项非常方便,无需超级用户即可将软件包作为超级用户安装为另一个非root用户使用(例如,在容器中可能会出现问题)。
– mdh
17-2-27在14:05
#4 楼
安装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
等,有关详细信息,请参阅自定义安装选项),软件包中包含的任何可执行文件/数据/脚本仍将保留其默认位置。 。评论
配置文件的一大优点。我个人在其中指定--prefix,因为我在主目录的共享服务器上有一个“本地”目录,在我移至pip之前,它已由easy_install用作前缀。系统$ PATH和$ PYTHONPATH之前已配置。代替了install-option =-install-purelib = / blah,有了这个更新的target = / blah选项/开关。这也很好,但是有时您只需要替换--prefix,即可与setup.py或easy_install一起使用。
– Tomasz Gandor
2013年12月13日上午10:10
#5 楼
要在需要的地方准确地安装一个库,我导航到了我想要的目录,然后使用终端pip install mylibraryName -t .
我从中获取的逻辑页面:https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download
评论
-t是--target的简写
–乔纳森
16-9-27在14:11
这是唯一对我有用的解决方案。 (Windows 7的)
–古巴人
19年7月30日在11:59
#6 楼
在python3.5和pip 9.0.3上测试了这些选项:不考虑依赖包已在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。
评论
例如,在python 2.7.16下运行,--target(或--prefix)将安装Jinja2-2.10.1.dist-info /,而install --install-option =“-prefix将安装Jinja2-2.10.1-py2 .7.egg-info /,这是我真正想要的
– Greg Dougherty
19年8月7日在17:52
并不总是通过环境变量来工作。
–x-yuri
8月15日17:38
#7 楼
似乎没有人提到-t选项,但最简单的方法是:pip install -t <direct directory> <package>
评论
-t选项是--target选项的简短版本,已在另一个答案(stackoverflow.com/a/19404371/594053)中进行了介绍:)
– MattiSG
18-4-3在5:40
#8 楼
只需在@Ian Bicking的答案中添加一点:如果要在远程服务器上将一些Python软件包安装到其主目录中(没有sudo用户权限),则使用
--user
选项指定安装的目录也可以使用。例如,
pip install --user python-memcached
该命令会将软件包安装到PYTHONPATH中列出的目录之一。
#9 楼
较新版本的pip
(8或更高版本)可以直接使用--prefix
选项:pip install --prefix=$PREFIX_PATH package_name
其中
$PREFIX_PATH
是安装前缀,其中lib,bin和其他顶级文件夹位于已放置。#10 楼
pip install packageName -t pathOfDirectory
或
pip install packageName --target pathOfDirectorty
#11 楼
我找到了一种简单的方法pip3 install "package_name" -t "target_dir"
源-https://pip.pypa.io/en/stable/reference/pip_install/
-t switch = target
评论
更少的wc +来源
– Samir Kape
10月16日10:29
@merv是不同的,因为它不一样。是不是
– Alex M.M.
11月6日14:44
#12 楼
要补充已经很好的建议,因为在没有对/usr/local
的写许可权时安装IPython时出现问题。pip使用distutils进行安装,此线程讨论了如何导致问题,因为它取决于
sys.prefix
设置。我的问题发生在IPython安装尝试在权限被拒绝的情况下写入'/ usr / local / share / man / man1'时。由于安装失败,因此似乎没有在bin目录中写入IPython文件。
使用“ --user”可以将文件写入〜/ .local。在$ PATH中添加〜/ .local / bin意味着我可以从那里使用“ 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
然后(尽管以前的失败/.local安装,
-I
也被用于强制安装): pip install -I ipython
然后我在
/usr/local/lib/python2.7/bin
中添加了$PATH
。我想我应该把它包括进去,以防其他人在机器上遇到类似问题没有sudo访问权限。
#13 楼
不幸的是,如果您将brew与python一起使用,则pip / pip3附带的选项非常有限。您没有上述的--install-option,-target,-user选项。有关pip install的注意事项--user
普通的pip安装- -user对于酿造的Python禁用。这是由于distutils中的一个错误,因为Homebrew编写了一个distutils.cfg来设置程序包前缀。 >
python -m pip install --user --install-option="--prefix=" <package-name>
您可能会觉得这行很麻烦。我建议使用pyenv进行管理。
如果您使用的是
brew upgrade python python3
具有讽刺意味的是,您实际上正在降级pip功能。
(我发布此答案,只是因为pip在我的Mac OS X中没有--target选项,我花了几个小时修复它)
评论
这个答案带有显式前缀,由于先前的努力而被忽略安装,这对我有用:python -m pip install --user --install-option =“-prefix ='/ myFunkyApp / lib'” --ignore-已安装
–杰里米·琼斯(Jeremy Jones)
19年8月28日在16:00
#14 楼
在Pythonv1.5.6
(GNU / Linux)上使用pip v2.7.3
,选项--root
允许(显然)指定全局安装前缀,而与特定软件包的选项无关。尝试f.i.,$ pip install --root=/alternative/prefix/path package_name
#15 楼
我建议遵循文档并创建〜/ .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时,告诉我没有用于卸载过程的软件包...。所以还是有问题,但是软件包转到了预定义的位置。 br />
#16 楼
pip install /path/to/package/
现在成为可能。
与
-e
或--editable
标志的区别在于,-e
链接到软件包的保存位置(即,您的下载文件夹),而不是将其安装到python路径中。这意味着,如果您将软件包删除/移动到另一个文件夹,将无法使用它。
评论
这不能回答问题
– Clintm
19/12/4在4:19
评论
相关:如何使用pip将vc软件包从vcs的可编辑安装到特定目录?现在第二个问题:当您已经安装到自定义目录中时,如何使pip不要尝试从非自定义目录中删除较旧的版本。例如-一个系统级的,您没有写权限。到目前为止,我只使用easy_install ...
@TomaszGandor我认为使用--ignore-installed选项应该可以防止pip尝试卸载已安装的软件包。
抱歉,我是pip的新手,但您的问题与询问“如何将pi安装到其他版本的python”相同吗?我有python 3.4和3.5,但我希望将pip安装转到python 3.5。
@Charlie Nope,另一个问题。我对您的安装/意图不太了解,但是通常我可能会使用virtualenvwrapper并使用mkvirtualenv --python = / usr / bin / python3.5 env_name
创建虚拟环境