如何在pip freeze生成的requirements文件中保留pip install选项?

33 投票
2 回答
26870 浏览
提问于 2025-04-17 10:19

我用一个pip需求文件来管理我项目的依赖库列表。

现在我发现自己需要用 pip install --install-option='some-setup.py.option' 来安装一个库,但是 pip freeze 并不会把这些选项记录下来,而我又把输出保存到了项目的 requirements.txt 文件里。这就造成了问题,因为在新机器上简单地运行 pip install -r requirements.txt 会安装所有依赖库,但没有提供这个库所需的参数,这样我就失去了简单的操作流程。

所以,我有两个问题:

  • 有没有办法在 pip freeze 的输出中保留 pip 安装选项?
  • 如果没有,是否可以手动修改需求文件,添加安装选项?如果必须这样做,我可以接受放弃 pip freeze 的简单操作,转而手动维护需求文件。我查过文档,但没有找到相关的帮助。

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

我想安装pymongo,但不想构建C扩展,这样我就可以在一个基于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

在新的虚拟环境中,尝试从 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...

更新 问题 271 在2011年4月被提出来,要求在 requirements.txt 中能够为每一行指定 --install-option。如果你也遇到同样的问题,请投票支持这个问题。

2 个回答

7

这可能有点简单,但如果你愿意手动管理需求和相关选项的话,为什么不把它们做成一个小的脚本呢?这个脚本可以包含所有的pip命令。这样做只是个临时解决办法,等到你提的功能请求被重视了再说 :)

34

从7.0版本开始(发布于2015年5月21日),pip可以从需求文件中解析--install-option--global-option。现在,你可以在你的requirements.txt文件中添加以下内容:

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

更多信息可以在这里这里找到。

撰写回答