我们应该把所有必需的包和它们的依赖包放在 requirements.txt 上还是只放需要的包

Raj*_*jan 6 python pip python-2.7 python-3.x

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

pip freeze
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)

问题: 我们应该把所有这些都放在requirement.txt文件中还是只是bpython==0.17

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

pip freeze > requirement.txt
Run Code Online (Sandbox Code Playgroud)

comm -12 <(pip list --format=freeze --not-required) <(pip freeze) > requirements.txt
Run Code Online (Sandbox Code Playgroud)

而且我仍然不确定我是否应该将所有包放入我收到的表单中,pip freeze或者只放置那些没有依赖包的必需包可以/更好。


阅读PIP 文件,我发现最接近的是:

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

我仍然像以前一样困惑,将不胜感激帮助...

Raj*_*jan 5

我自己挖掘了很多,@Charles Duffy上面评论的似乎是最正确的方式。

\n\n
\n

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

\n
\n\n

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

\n\n

它就像 npm,更容易维护requirements和创建venv.

\n\n
\n

它会自动为您的项目创建和管理 virtualenv,并在您安装/卸载软件包时从 Pipfile 添加/删除软件包。它还生成ever\xe2\x80\x93重要的Pipfile.lock,用于生成确定性构建。

\n
\n