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

时间:2010-05-26 17:55:48

标签: python pip

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

那么如何修改命令

pip install package_name

使pip将软件包安装在默认site-packages以外的某个位置?

17 个答案:

答案 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选项,但会告诉它在自定义前缀下制作binlibshare和其他目录,而不是$HOME/.local

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

请注意,如果任何依赖于此类的软件包需要在--upgrade目录中安装较新版本,则可能还需要指定--ignore-installedPYTHONUSERBASE选项。覆盖系统提供的版本。

一个完整的例子:

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

..将最新版本的scipynumpy软件包安装到一个目录中,然后您可以将其包含在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)

我找到了一种简单的方法

cdist

源-https://pip.pypa.io/en/stable/reference/pip_install/

-t开关=目标

答案 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/