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

那么我该如何修改命令

pip install package_name


使pip将软件包安装在默认site-packages之外的其他位置?

评论

相关:如何使用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
创建虚拟环境

#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选项,但告诉它使将binlibshare和其他目录(而不是$HOME/.local)放在自定义前缀下。

然后您可以将其添加到PATHPYTHONPATH和其他变量中,就像普通安装目录一样。

请注意,如果依赖于此的任何程序包要求在--upgrade目录中安装较新的版本,则您可能还需要指定--ignore-installedPYTHONUSERBASE选项,以覆盖系统提供的版本。 >
完整示例:

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 楼

在Python v1.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