70

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

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

要求.txt:

setuptools>=0.6c9
pymongo==1.9
simplejson==2.1.3

有没有办法为 pip 指定安装顺序,因为它本身似乎无法正确执行?

这可以通过两个单独的需求文件来解决,但如果我现在或将来不需要维护多个需求文件会很好。

pip 0.8.3 问题仍然存在。

4

9 回答 9

37

您可以使用:

cat requirements.txt | xargs pip install
于 2012-11-21T23:22:05.017 回答
22

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

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

-n 1-L 1选项对于逐个安装软件包并将 requirements.txt 文件中的每一行视为单独的项目是必需的。

于 2015-03-23T02:09:30.933 回答
17

这是一个愚蠢的黑客,但可能只是工作。编写一个 bash 脚本,逐行读取您的需求文件并在其上运行 pip 命令。

#!/bin/bash
for line in $(cat requirements.txt)
do
  pip install $line -E /path/to/virtualenv
done
于 2011-03-22T18:21:02.167 回答
13

遗憾的是升级建议不起作用。如果您阅读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 给出的解决方法似乎是当前唯一的解决方案。

于 2014-02-03T02:44:11.203 回答
7

Pymongo 需要 setuptools>=0.6c9

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

至于安装顺序,在 pip 6.1.0 中已修复;

来自pip install – pip 文档的安装顺序 部分:

从 v6.1.0 开始,pip 在其依赖项之前安装依赖项,即按“拓扑顺序”。这是目前唯一与订单相关的承诺点。

然后:

在 v6.1.0 之前,pip 没有对安装顺序做出任何承诺。

但是,如果 Pymongo 没有正确规范要求,它也无济于事。

于 2016-03-18T14:24:37.003 回答
5

继@lukasrms 的解决方案之后 - 我必须这样做才能让 pip 一次安装我的要求:

cat requirements.txt | xargs -n 1 pip install
于 2014-12-04T11:52:03.187 回答
5

如果您的需求文件中有注释,您将希望使用:

grep -v "^#" requirements.txt | xargs pip install
于 2016-01-08T19:00:56.890 回答
1

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

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

我通过使用 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 时遇到了这些问题。

于 2011-03-23T13:40:36.347 回答
0

抱歉,我的第一个答案是错误的,因为我有 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

于 2011-03-22T21:23:05.587 回答