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

Sep*_*älä 54 python pip virtualenv requirements.txt

我正在使用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
Run Code Online (Sandbox Code Playgroud)

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

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

点数0.8.3仍然存在问题.

luc*_*300 27

你可以使用:

cat requirements.txt | xargs pip install
Run Code Online (Sandbox Code Playgroud)

  • 这是[无用的猫(UUoC)](http://porkmail.org/era/unix/award.html).此外,您必须添加`-L 1`以确保只使用一行.xargs -L 1 pip install <requirements.txt` (5认同)
  • 有时,`requirements.txt`中会有注释(以'#`开头的行被`pip`视为注释)。在这种情况下,您可能更喜欢使用:`grep -v'^#'requirements.txt | xargs pip安装` (2认同)

rub*_*eet 14

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

#!/bin/bash
for line in $(cat requirements.txt)
do
  pip install $line -E /path/to/virtualenv
done
Run Code Online (Sandbox Code Playgroud)

  • 如果使用fabric,则可以对此脚本进行python化:`for line in open("requirements.txt","r"):sudo("pip -E%s install%s"%(virtualenv_path,line))` (5认同)

Chr*_*ski 13

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

cat requirements.txt | xargs -n 1 -L 1 pip install
Run Code Online (Sandbox Code Playgroud)

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


Kev*_*ell 10

遗憾的是升级建议不起作用.如果您阅读https://github.com/pypa/pip/issues/24中的其他详细信息,您将看到原因

在尝试安装之前,pip将首先构建所有包.所以使用如下的需求文件

numpy==1.7.1
scipy==0.13.2
statsmodels==0.5.0
Run Code Online (Sandbox Code Playgroud)

statsmodels的构建将失败,并带有以下语句

ImportError: statsmodels requires numpy
Run Code Online (Sandbox Code Playgroud)

为需求文件中的每个条目手动调用pip的解决方法(通过shell脚本)似乎是目前唯一的解决方案.

  • 添加拓扑排序到pip([问题#2478:拓扑安装顺序](https://github.com/pypa/pip/pull/2616))不再是这种情况 - pip先安装每个软件包的依赖项,然后再安装包装本身. (3认同)

Leo*_*Leo 5

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

cat requirements.txt | xargs -n 1 pip install
Run Code Online (Sandbox Code Playgroud)


Jas*_* V. 5

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

grep -v "^#" requirements.txt | xargs pip install
Run Code Online (Sandbox Code Playgroud)


Pio*_*ost 5

Pymongo需要setuptools> = 0.6c9

你怎么知道的?需要构建还是要安装?你没有说你试图安装什么版本的Pymongo,但是查看setup.py当前(3.2.2)版本的文件,没有规定Pymongo运行所需的内容setup.py(setup_requires)以及安装所需的内容(install_requires).没有这样的信息,pip无法确保特定版本的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没有正确规定要求,它也无济于事.