为什么在 requirements.txt 中包含依赖项的依赖项是最佳实践?

3

我知道在很多情况下,明确声明我们正在使用的依赖版本是非常重要的,因此这也适用于嵌套的依赖关系。

然而,当我们决定删除一个依赖项并需要使用像 pideptree 这样的工具查找它是否有任何自己的依赖项时,情况就变得非常混乱。而且还需要确保这些嵌套的依赖项不被我们其他的一级依赖项所使用。

假设我们不需要冻结我们的依赖版本,那么包含嵌套依赖项的优点是什么呢?与让 pip 为我们处理有什么区别呢?

2个回答

5

实际上,人们不会这样做。 requirements.txt 应该列出您的依赖项而不包含嵌套依赖项。 固定依赖关系通常放在另一个文件中:

pip freeze > requirements-freeze.txt

如果人们在requirements.txt中设置依赖关系,那不算是一个错误,但肯定不是最佳实践。

2

实际上,你是正确的。如果你尝试过pipenv,你会发现它就是你想要的东西。

人们之所以在requirements.txt中写出所有嵌套依赖关系,只是因为pip freeze > requirements.txt将列出所有已安装的软件包。

pipenv使用一种更好的方式来管理依赖关系,类似于npmyarn,因此您可以轻松地删除顶级模块的所有嵌套依赖项。

但是列出所有嵌套依赖项仍然是合理的。我之前遇到的一个情况是,第三方A依赖于另一个第三方B。在A中,B的依赖关系是B>=4.10.0。但是在B==4.12.0中,一些软件包从一个模块迁移到了另一个模块。由于导入断裂,整个库A也崩溃了。


你会发现这不是你想要的东西。 - joel
@JoelB 是的,这是一个老故事了。现在它已经不再是你想要的了。多么悲伤的故事。 - Sraw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接