【问题标题】:Why is it best practice to include the dependencies' dependencies in requirements.txt?为什么在 requirements.txt 中包含依赖项的依赖项是最佳实践?
【发布时间】:2018-10-04 09:47:41
【问题描述】:

我明白,在许多情况下,明确说明我们正在使用的依赖版本非常重要,因此这也适用于嵌套依赖。

但是,当我们决定删除一个依赖项并需要使用 pideptree 之类的东西来确定它是否有我们自己安装的任何依赖项并另外确保这些嵌套的依赖项没有被使用时,它变得非常混乱由我们的其他一级依赖项。

假设我们不需要冻结我们的依赖版本,包含嵌套依赖而不是让 pip 为我们处理它有什么好处?

【问题讨论】:

    标签: python python-3.x pip dependencies requirements.txt


    【解决方案1】:

    人们实际上不会那样做。 requirements.txt 确实应该列出没有嵌套依赖项的依赖项。固定的依赖项通常放在另一个文件中:

    pip freeze > requirements-freeze.txt
    

    如果人们将依赖项固定在 requirements.txt 中,这并不完全是错误,但肯定不是最佳实践。

    【讨论】:

      【解决方案2】:

      其实你是对的。如果你尝试过pipenv,你会发现它就是你想要的。

      人们之所以把所有嵌套依赖都写在requirements.txt中只是因为pip freeze > requirements.txt会列出所有已安装的包。

      并且pipenv 使用更好的方式来管理依赖项,例如npmyarn,这样您就可以轻松删除顶级模块的所有嵌套依赖项。

      但是列出所有嵌套的依赖关系仍然是合理的。之前遇到的一个案例,就是一个第三方A依赖另一个第三方B。而B在A中的依赖是B>=4.10.0。但是在B==4.12.0 中,一些包从一个模块迁移到了另一个模块。由于导入中断,因此整个库 A 也中断了。

      【讨论】:

      • “你会发现它就是你想要的东西”。那不是我发现的
      • @JoelB 是的,这是一个古老的故事。现在它不再是你想要的了。多么悲伤的故事。
      猜你喜欢
      • 2018-03-03
      • 2011-10-15
      • 2019-08-24
      • 2011-08-16
      • 2022-08-09
      • 2015-10-14
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      相关资源
      最近更新 更多