【问题标题】:How to maintain pip install options in requirements file made by pip freeze?如何在 pip freeze 制作的需求文件中维护 pip 安装选项?
【发布时间】:2012-02-11 01:51:02
【问题描述】:

我使用pip requirements file 来维护我的项目的依赖项列表。

我现在发现自己必须使用 pip install --install-option='some-setup.py.option' 安装库 但是 pip freeze 不会在其输出中记录这些选项,我将其保存在项目的 requirements.txt 中。这会导致问题,因为在新机器上一个简单的pip install -r requirements.txt 会安装所有依赖项而没有为这个库提供所需的参数,并且我已经失去了简单的往返操作。

所以,我的两部分问题是:

  • 有没有办法以某种方式在 pip freeze 输出中维护 pip 安装选项?
  • 如果没有,有没有办法手动破解需求文件以添加安装选项?如果必须,我可以放弃pip freeze 的往返性质,并切换到需求文件的手动维护。我检查了documentation,但看不到任何帮助。

以下是不必要但可能有趣的细节

我想安装 pymongowithout building the C extension 以便我可以在基于 eventlet 的应用程序中异步使用它。

根据需要安装并构建 requirements.txt:

(test)day@office:~/test$ pip install pymongo --install-option='--no_ext'
Downloading/unpacking pymongo
  Downloading pymongo-2.1.1.tar.gz (199Kb): 199Kb downloaded
  Running setup.py egg_info for package pymongo
Installing collected packages: pymongo
  Running setup.py install for pymongo
Successfully installed pymongo
Cleaning up...
(test)day@office:~/test$ pip freeze >  requirements.txt
(test)day@office:~/test$ cat requirements.txt
bottle==0.10.7
distribute==0.6.10
eventlet==0.9.16
greenlet==0.3.3
lxml==2.3.3
pymongo==2.1.1
simplejson==2.3.2
wsgiref==0.1.2

在新的 virtualenv 中,尝试从 requirements.txt 安装相同的项目。 pip 为 pymongo 构建 C 扩展 :(

(test2)day@office:~/test2$ pip install -r requirements.txt 
...
Downloading/unpacking pymongo==2.1.1 (from -r requirements.txt (line 6))
  Downloading pymongo-2.1.1.tar.gz (199Kb): 199Kb downloaded
  Running setup.py egg_info for package pymongo
Installing collected packages: pymongo
  Running setup.py install for pymongo
    building 'bson._cbson' extension
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -Ibson -I/usr/include/python2.6 -c bson/_cbsonmodule.c -o build/temp.linux-i686-2.6/bson/_cbsonmodule.o
...
Successfully installed pymongo
Cleaning up...

更新 Issue 271 于 2011 年 4 月针对 pip 打开,要求能够在 requirements.txt 中指定每行 --install-option。如果您有同样的问题,请为该问题投票。

【问题讨论】:

  • 如果您手动将 --install-option='--no_ext' 添加到需求文件中,是否有效? - 如果不是,我怀疑您需要请求 pip 开发人员添加此功能(这是个好主意!)
  • @d3vid 恐怕这行不通。已经有一个功能请求,于 2011 年 4 月开放:github.com/pypa/pip/issues/271。也请在那里添加您的 +1。

标签: python pip


【解决方案1】:

自 7.0 版(发布 2015-05-21)以来,pip 能够从需求文件中解析 --install-option--global-option。现在应该可以在您的requirements.txt 中包含以下行:

pymongo==2.1.1 --install-option='--no_ext'

更多信息可以在herehere找到。

【讨论】:

【解决方案2】:

这可能太天真了,但是如果您可以手动管理需求和相应的选项 - 为什么不将它们维护为包含整个 pip 咒语的小型 shell 脚本呢?只是一个解决方法,直到功能请求被听取:)

【讨论】:

  • 我也有同样的问题,我觉得自己没有想出这个有点愚蠢。感谢您发布此建议!
  • 打破了requirements.txt 约定,这很糟糕,因为它破坏了下游的东西,例如docs.saltstack.com/en/latest/ref/states/all/…。但是,是的,这显然是这里需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
  • 2012-10-27
  • 2011-06-27
  • 2014-02-14
  • 2015-09-21
  • 2011-04-09
相关资源
最近更新 更多