python库的安装有顺序么_如何指定python pip的安装顺序?

如何指定python pip的安装顺序?

我正在使用fabric(0.9.4)+ pip(0.8.2),并且需要为多个服务器安装一些python模块。 所有服务器均具有旧版本的setuptools(0.6c8),需要针对pymongo模块进行升级。 Pymongo需要setuptools> = 0.6c9。

我的问题是pip使用pymongo而不是setuptools开始安装,这会导致pip停止。 在需求文件中改组模块顺序似乎无济于事。

requirements.txt:

setuptools>=0.6c9

pymongo==1.9

simplejson==2.1.3

有一种方法可以指定pip的安装顺序,因为它似乎无法单独正确地执行安装顺序?

可以使用两个单独的需求文件解决此问题,但是如果我现在或将来不需要维护多个需求文件,那就很好了。

问题仍然存在,点子为0.8.3。

9个解决方案

27 votes

您可以使用:

cat requirements.txt | xargs pip install

lucasr300 answered 2020-01-06T16:09:02Z

13 votes

这是一个愚蠢的骇客,但也许行之有效。 编写一个bash脚本,该脚本逐行读取您的需求文件并在其上运行pip命令。

#!/bin/bash

for line in $(cat requirements.txt)

do

pip install $line -E /path/to/virtualenv

done

rubayeet answered 2020-01-06T16:08:42Z

12 votes

要允许Requirements.txt中的所有类型的条目(例如,git存储库中的软件包),您需要使用以下命令集

cat requirements.txt | xargs -n 1 -L 1 pip install

必须分别使用-n 1和-L 1选项,才能将软件包一个接一个地安装,并将requirements.txt文件中的每一行都视为一个单独的项目。

Chris Gorgolewski answered 2020-01-06T16:09:27Z

9 votes

遗憾的是,升级建议无法正常工作。 如果您在[https://github.com/pypa/pip/issues/24]中阅读了其他详细信息,您将明白为什么

pip会先尝试构建所有软件包,然后再尝试安装它们。 因此,使用如下所示的需求文件

numpy==1.7.1

scipy==0.13.2

statsmodels==0.5.0

statsmodels的构建将因以下语句而失败

ImportError: statsmodels requires numpy

手动调用需求文件(通过Shell脚本)中每个条目的pip所提供的解决方法似乎是当前的唯一解决方案。

Kevin Campbell answered 2020-01-06T16:10:01Z

5 votes

Pymongo需要setuptools> = 0.6c9

你怎么知道的? 需要构建或安装? 您没有说要尝试安装的Pymongo版本,但是查看当前(3.2.2)版本的setup.py文件,既没有规范Pymongo要求运行setup.py(setup_requires),也没有要求安装什么(install_requires) 。 没有此类信息,点子不能确保setuptools的特定版本。 如果Pymongo需要特定版本的setuptools来运行其setup.py(而不是要求setuptools本身运行setup函数),那么另一个问题是直到最近还没有办法指定它。 现在有一个规范– PEP 518 –指定Python项目的最低构建系统要求,应该在pip中不久实现–实施PEP 518支持#3691。

关于安装顺序,此问题已在第6.1.0点中解决;

从pip install – pip文档的“安装顺序”部分:

从v6.1.0开始,pip会先安装依赖项,然后再安装依赖项。   按照“拓扑顺序”。 这是目前唯一的承诺点   与订单相关。

然后:

在v6.1.0之前,pip不对安装顺序作出任何承诺。

但是,如果没有正确指定Pymongo的要求,也将无济于事。

Piotr Dobrogost answered 2020-01-06T16:10:53Z

4 votes

接下来是@lukasrms的解决方案-我必须这样做才能使pip一次安装我的需求:

cat requirements.txt | xargs -n 1 pip install

Leo answered 2020-01-06T16:11:13Z

4 votes

如果您的需求文件中有注释,则需要使用:

grep -v "^#" requirements.txt | xargs pip install

Jason V. answered 2020-01-06T16:11:33Z

1 votes

我最终在virtualenv内运行了pip而不是使用“ pip -E”,因为使用-E pip仍然可以看到服务器的站点软件包,这显然会弄乱一些安装。

对于没有virtualenvs的服务器,我也遇到了麻烦。 即使我使用单独的pip命令pymongo安装了setuptools,也将拒绝安装。

我通过与easy_install分开安装setuptools来解决了这个问题,因为这似乎是pip和setuptools之间的问题。

fabfile.py中的片段:

env.activate = "source %s/bin/activate" % virtualenv_path

_virtualenv("easy_install -U setuptools")

_virtualenv("pip install -r requirements.txt")

def _virtualenv(command)

if env.virtualenv:

sudo(env.activate + "&&" + command)

else:

sudo(command)

我在pip 0.8.3和0.8.2中遇到了这些问题。

Seppo Erviälä answered 2020-01-06T16:12:13Z

0 votes

抱歉,我的第一个答案是错误的,因为我的setuptools> = 0.6c9。

似乎不可能,因为pymongo的setup.py需要setuptools> = 0.6c9,但是pip只下载了setuptools> = 0.6c9,尚未安装。

有人在我之前指出的问题中对此进行了讨论。

几周前,我自己创建了一个问题:在安装以前的软件包之前,不要对要求列表中的每个软件包运行egg_info。

对不起,嘈杂。

第一个答案:

将您的pip升级到0.8.3版本,此错误已修正了安装顺序。

现在,如果您升级,一切正常:-)

在此处查看新闻:[http://www.pip-installer.org/en/0.8.3/news.html]

Hugo Tavares answered 2020-01-06T16:13:08Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值