为什么最好的做法是将依赖项的依赖项包含在requirements.txt中?

时间:2018-04-24 08:08:04

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

我很欣赏在许多情况下,明确说明我们正在使用的依赖版本是很重要的,因此这也适用于嵌套依赖项。

然而,当我们决定删除一个依赖项并且需要使用像pideptree这样的东西时,它会变得非常混乱,以确定它是否还有我们自己安装的依赖项,另外还要确保这些嵌套依赖项没有被使用通过我们的其他第一级依赖。

假设我们不需要冻结我们的依赖版本,那么包含嵌套依赖项的优势是什么,而不仅仅是让pip为我们处理它?<​​/ p>

2 个答案:

答案 0 :(得分:2)

实际上,你是对的。如果你已经尝试pipenv,你会发现它就是你想要的东西。

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

并且pipenv使用更好的方式来管理喜欢npmyarn的依赖项,以便您可以轻松删除顶层模块的所有嵌套依赖项。

但列出所有嵌套依赖项仍然是合理的。我之前遇到的一个案例,即第三方A依赖另一个第三方B.而A在B中的依赖性是B>=4.10.0。但是在B==4.12.0中,一些包从一个模块迁移到另一个模块。由于进口打破,整个图书馆A也破了。

答案 1 :(得分:1)

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

pip freeze > requirements-freeze.txt

如果人们将requirements.txt中的依赖关系列为不完全错误,而不是最佳做法。