其他两个答案相互矛盾的原因是它们都是正确的(并且值得一读),但它们适用于不同的情况。
如果你在 PyPI 上发布一个库,你应该声明你知道的任何依赖项,而不是固定到特定版本。例如,如果您知道自己需要>= 1.2
,但1.4
已损坏,则可以编写类似somepkg >= 1.2, != 1.4
. 如果您知道其中一件事是somepkg
遵循 SemVer,那么您可以添加一个< 2
.
如果您正在构建自己部署的 Web 应用程序之类的东西,那么您应该固定所有确切的依赖项,并使用 pyup.io 或 requires.io 之类的服务在新版本发布时通知您。通过这种方式,您可以保持最新状态,同时确保您部署的版本与您测试的版本相同。
请注意,这两条建议是相辅相成的:事实上,如果应用程序 A 使用库 B,那么 A 的作者或 B 的作者可以固定 B 的依赖项,但不能同时固定两者。所以我们必须选择一个。这里的基本原则是最好尽可能晚地完成,即由 A 的作者完成,他可以看到他们的整个系统;图书馆 B 的工作是传递一些有用的提示来帮助 A 做出这些决定。特别是,如果 A 所依赖的所有库都准确地记录了他们对底层依赖项的了解,那么 A 就有可能在它们重叠时做出明智的决定。就像如果依赖项 B 依赖于requests >= 1.0, != 1.2
,而依赖项 C 依赖于requests >= 1.1
,那么我们可以猜测 1.1 或 1.3 可能是固定的好版本。如果依赖项 B 依赖于requests == 1.1
并且依赖项 C 取决于requests == 1.2
,那么我们就被卡住了。