我有一个要求.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
并检查结果。这样,第三方软件包更新就不会破坏您的构建,并且您以后可以随时手动升级(并检查结果(。