如何优化我的requirements.txt以仅包含我的应用程序直接使用的包?

Pau*_*ipp 5 python pip requirements.txt

举例来说,我将 django 添加到我的 venv 中pip install django。生成我的requirements.txt文件的通常方法是pip freeze > requirements.txt产生:

asgiref==3.2.3
Django==3.0.2
pytz==2019.3
sqlparse==0.3.0
Run Code Online (Sandbox Code Playgroud)

这是个谎言。我唯一的要求是 django,我想要的(完全有效的)requirements.txt 是:

Django>=3.0.2, <4
Run Code Online (Sandbox Code Playgroud)

有时这很重要。对于真正的应用程序,我最终会得到许多具有重叠依赖项的包。升级时这可能会或可能不会导致问题,但如果我固定了所有我不关心的依赖包,几乎总是会出现问题(在上面的示例中,它们取决于 django 开发人员,而不是我)。

为了优化依赖项臃肿的requirements.txt 文件,我可以手动检查源代码(导致上面的requirements.txt 为空;)),但对于任何实际应用程序来说,这很快就会变得不切实际。

Pau*_*ipp 2

一旦支持 Python 3.7 及更高版本, http://stackoverflow.com/a/31684470/9609843建议的 pipreqs将是一个很好的解决方案。

在此之前,pipdeptree 可以很好地满足大多数用途:

pipdeptree -l | grep -i '^[[:alnum:]]' > requirements.txt
Run Code Online (Sandbox Code Playgroud)