如何在pip freeze生成的requirements文件中保留pip install选项?
我用一个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'