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

  • Post author:
  • Post category:python


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

那么我该如何修改命令呢

pip install package_name

使

pip

安装包以外的默认

site-packages

以外的地方?


#1楼

安装

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仍将转到其默认位置,有关详细信息,请查看

自定义安装

选项)。


#2楼


–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上(这解决

了一个问题

):

python -m pip install -U pip

#3楼

使用Python

v2.7.3

(GNU / Linux)上的pip

v1.5.6

,选项

--root

允许指定全局安装前缀(显然),而不管特定包的选项如何。 试试fi,

$ pip install --root=/alternative/prefix/path package_name

#4楼

只需在@Ian Bicking的答案中添加一点:

如果要在远程服务器上将某个Python包安装到一个主目录(没有sudo用户权限),则使用

--user

选项指定已安装的目录也可以。

例如,

pip install --user python-memcached

该命令会将程序包安装到PYTHONPATH中列出的某个目录中。


#5楼

而不是

--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

选项,但告诉它在自定义前缀而不是

$HOME/.local

下创建

bin



lib



share

和其他目录。

然后,您可以像普通安装目录一样将其添加到

PATH



PYTHONPATH

和其他变量中。


请注意,如果任何依赖于此类的软件包需要在

PYTHONUSERBASE

目录中安装较新版本,则可能还需要指定

--upgrade



--ignore-installed

选项,以覆盖系统提供的版本。


一个完整的例子:

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仍然是一个更好,更整洁的解决方案!


#6楼

使用:

pip install --install-option="--prefix=$PREFIX_PATH" package_name

您可能还希望使用

--ignore-installed

强制使用此新前缀重新安装所有依赖项。 您可以多次使用

--install-option

来添加可以与

python setup.py install

一起使用的任何选项( –

--prefix

可能就是您想要的,但是您可以使用更多选项)。


#7楼

添加到已经很好的建议,因为当我没有对

/usr/local

写权限时,我遇到了安装

IPython

的问题。

pip使用distutils来进行安装,

这个线程

讨论了它如何导致问题,因为它依赖于

sys.prefix

设置。

我的问题发生在IPython安装尝试写入’/ 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访问权限的机器上有类似的问题。


#8楼

为了将库安装到我想要的地方,我导航到了我希望目录与终端然后使用的位置

pip install mylibraryName -t . 

我从这个页面采取的逻辑:

https



//cloud.google.com/appengine/docs/python/googlecloudstorageclient/download


#9楼

较新版本的

pip

(8或更高版本)可以直接使用


--prefix

选项

pip install --prefix=$PREFIX_PATH package_name

其中

$PREFIX_PATH

是安装lib,bin和其他顶级文件夹的安装前缀。


#10楼

我建议按照文档编写〜/ .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时告诉我没有这样的软件包用于卸载过程….所以有些东西仍然是错误的但是软件包进入了它预定义的位置。


#11楼

似乎没有人提到-t选项,但最简单:

pip install -t <direct directory> <package>

#12楼

如果你正在使用brew与python,不幸的是,pip / pip3的选项非常有限。 如上所述,您没有–install-option, – target, – users options。

关于pip install的

注意事项

–user

正常的pip install –user对于brewed Python是禁用的。 这是因为distutils中的一个错误,因为Homebrew写了一个设置包前缀的distutils.cfg。 一个可能的解决方法(将可执行脚本放在〜/ Library / Python /./ bin中)是:

python -m pip install --user --install-option="--prefix=" <package-name>

您可能会觉得这条线非常麻烦。 我建议使用pyenv进行管理。 如果你正在使用


brew upgrade python python3

具有讽刺意味的是,你实际上是

降级

pip功能。

(我发布这个答案,只是因为我的mac osx中的pip没有–target选项,我花了几个小时修复它)


#13楼

使用python3.5和pip 9.0.3测试了这些选项:


pip install –target / myfolder [packages]

在/ 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 [包]

将软件包安装到$ HOME:/home/[USER]/.local/lib/python3.5/site-packages Python会自动从此.local路径搜索,因此您无需将其放入PYTHONPATH。

=>在大多数情况下 – 用户是最好的选择。 如果由于某种原因无法使用主文件夹,那么–prefix。


#14楼


pip install /path/to/package/

现在可以了。

使用

-e



--editable

标志的区别在于

-e

链接到保存包的位置(即下载文件夹),而不是将其安装到python路径中。

这意味着如果您删除/移动包到另一个文件夹,您将无法使用它。


#15楼

pip install packageName -t pathOfDirectory

要么

pip install packageName --target pathOfDirectorty