当一个包指定一个范围而另一个包没有指定范围时,依赖项解析如何与 pip 一起工作?



我有一个要求.txt只有 2 个依赖项:

sentry-sdk==0.7.11
requests==2.21.0

我已经检查了两个软件包的 setup.py,并且都依赖于urllib3:

  • 请求提供的范围不包含 1.25
  • sentry-sdk 不指定特定版本或范围

最近发布了新版本的urllib3(1.25(,当我使用pip安装依赖项时,我收到以下错误:

ERROR: requests 2.21.0 has requirement urllib3<1.25,>=1.21.1, but you'll have urllib3 1.25 which is incompatible.

这种行为是预期的还是 pip 中的错误?

在install_requires中不指定依赖项的版本是什么意思?"强制使用最新版本"?

您观察到此行为的原因是 pip 首先安装sentry-sdk。由于它没有版本限制,因此您将获得最新版本(1.25(。要安装 requests 时,此版本不兼容。

解决这个问题的唯一方法是全局解决所有版本约束,这是 AFAIK pip 无法做到的。

解决方案是在需求中指定所需的 urllib3 版本.txt(因为您知道使用其依赖项的哪个版本(。无论如何,对于没有约束的瞬态包来说,这可能是很好的实践。

实际上,使用 pip 进行可重现构建的方法是始终这样做

pip freeze > requirements.txt

并检查结果。这样,第三方软件包更新就不会破坏您的构建,并且您以后可以随时手动升级(并检查结果(。

相关内容

  • 没有找到相关文章

最新更新