我们是否应该将所有必需包及其依赖包放在requirement.txt或仅包含所需的包

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我们是否应该将所有必需包及其依赖包放在requirement.txt或仅包含所需的包相关的知识,希望对你有一定的参考价值。

如果我在新创建的virtualenv上安装一个包Eg:pip install bpython,我执行时收到的内容

pip freeze

输出:

blessings==1.6.1
bpython==0.17
certifi==2018.1.18
chardet==3.0.4
curtsies==0.2.11
greenlet==0.4.12
idna==2.6
Pygments==2.2.0
requests==2.18.4
six==1.11.0
urllib3==1.22
wcwidth==0.1.7

问题:我们是否需要将所有这些放在requirement.txt文件中或只是bpython==0.17

一旦我被要求清理requirement.txt文件,所以我确实更新了代码

pip freeze > requirement.txt

comm -12 <(pip list --format=freeze --not-required) <(pip freeze) > requirements.txt

而且我仍然不确定是否应该将所有包装从pip freeze中获得,或者更好的是只放置那些没有依赖包的所需包。


Document of PIP我发现最接近的是:

需求文件用于强制pip正确解析依赖项。就像现在一样,pip没有真正的依赖解析,而是简单地使用它为项目找到的第一个规范。

我仍然像以前一样困惑,HELP将受到赞赏......

答案

我经常挖掘自己,@Charles Duffy上面评论的最合适的方式。

您应该有两个单独的依赖项列表:一个具有人类已决定您需要的依赖项(其中不应包含传递依赖项);一个具有冻结列表,反映您测试的内容(应包含传递依赖项)

然而,最近随着pipenv的发布,我认为这是跟踪依赖关系的更好方法。

这就像是npm,更容易维护requirements和创建venv

它会自动为您的项目创建和管理virtualenv,以及在安装/卸载软件包时添加/删除Pipfile中的软件包。它还生成了非常重要的Pipfile.lock,用于生成确定性构建。

以上是关于我们是否应该将所有必需包及其依赖包放在requirement.txt或仅包含所需的包的主要内容,如果未能解决你的问题,请参考以下文章

pip将依赖包导成requirements.txt文件

项目依赖包导出与导入

用Yumdownloader将YUM安装包及其依赖包下载到本地

python 包管理 requirement.txt

Python项目requirements.txt依赖包如何生成?

Python将依赖包导出到requirements.txt文件