我应该如何为Python项目生成requirements.txt?
这是我遇到的pip冻结问题。假设我的包P需要A,B,C。假设C是一个导入X,Y,Z的库,但P只需要X.那么如果我:
1) Install A
2) Install B
3) Install C, which installs X, Y, Z
4) Do a pip freeze into P's requirements.txt
那么P&#39的requirements.txt将如下所示:
1) A
2) B
3) C
4) X
5) Y
6) Z
但是在我的Python安装中实际上并不需要Y和Z来运行P.
据我所知,运行pip freeze
生成P的要求将向您显示依赖关系的所有依赖关系,因此是P的实际依赖关系的超集。
答案 0 :(得分:5)
virtualenv的目的是对安装的软件包进行完全控制。
假设您只列出了A,B,C和X.每次从该需求文件创建一个新的virtualenv时,您将获得最新版本的Y和Z.这有几个问题:
pip freeze
并非旨在确定最低要求。它旨在使整个应用程序能够始终如一地部署到许多不同的环境中。这意味着它会谨慎行事并列出可能会对您的项目产生合理影响的所有。出于这些原因,您不应尝试从需求文件中删除Y和Z.
答案 1 :(得分:1)
我在另一篇 stackoverflow 帖子 https://stackoverflow.com/a/65666949/1512555 中回答了这个问题,我建议使用 pip-tools 中的 pip-compile
答案 2 :(得分:0)
有一个名为pipreqs的python模块。它会基于项目中的导入生成requirements.txt。
答案 3 :(得分:0)
pipreqs
库(例如conda install -c conda-forge pipreqs
)cd your/repository
)pipreqs --force
或者只是pipreqs --force your/repository
。
请参阅官方资料中的其他信息: https://pypi.org/project/pipreqs/