【问题标题】:Should we put all required and their dependent packages on requirement.txt or only required packages我们应该把所有必需的包和它们的依赖包放在requirement.txt 上还是只放在必需的包上
【发布时间】:2018-07-09 15:07:24
【问题描述】:

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

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 没有真正的依赖解析,而是简单地使用它为项目找到的第一个规范。

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

【问题讨论】:

  • 依赖将由pip freeze自动添加。因为这些是您测试的版本,所以它们是您要部署的版本。所以——你应该有两个独立的依赖列表:一个是人类决定你需要的依赖(它不应该包含传递依赖);一个带有反映您测试对象的冻结列表(应该包含传递依赖项)。您应该更新您的依赖关系并在版本之间重新生成冻结列表,但是给定版本的部署应该使用您运行 QA 的库版本。

标签: python python-3.x python-2.7 pip


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 2014-05-29
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多