我很欣赏在许多情况下,明确说明我们正在使用的依赖版本是很重要的,因此这也适用于嵌套依赖项。
然而,当我们决定删除一个依赖项并且需要使用像pideptree这样的东西时,它会变得非常混乱,以确定它是否还有我们自己安装的依赖项,另外还要确保这些嵌套依赖项没有被使用通过我们的其他第一级依赖。
假设我们不需要冻结我们的依赖版本,那么包含嵌套依赖项的优势是什么,而不仅仅是让pip为我们处理它?</ p>
答案 0 :(得分:2)
实际上,你是对的。如果你已经尝试pipenv
,你会发现它就是你想要的东西。
人们在requirements.txt
中编写所有嵌套依赖项的原因只是因为pip freeze > requirements.txt
将列出所有已安装的软件包。
并且pipenv
使用更好的方式来管理喜欢npm
或yarn
的依赖项,以便您可以轻松删除顶层模块的所有嵌套依赖项。
但列出所有嵌套依赖项仍然是合理的。我之前遇到的一个案例,即第三方A依赖另一个第三方B.而A在B中的依赖性是B>=4.10.0
。但是在B==4.12.0
中,一些包从一个模块迁移到另一个模块。由于进口打破,整个图书馆A也破了。
答案 1 :(得分:1)
人们实际上并不这样做。 requirements.txt
确实应该列出没有嵌套依赖项的依赖项。固定依赖关系通常放在另一个文件中:
pip freeze > requirements-freeze.txt
如果人们将requirements.txt
中的依赖关系列为不完全错误,而不是最佳做法。