我有一个只有2个依赖项的requirements.txt:
sentry-sdk==0.7.11
requests==2.21.0
我检查了两个软件包的setup.py,两者都依赖于urllib3:
最近我发布了一个新版本的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无法做到这一点。
解决方案是在requirements.txt中指定所需的urllib3版本(因为您知道它使用的依赖项版本)。对于没有约束的瞬态包,这可能是很好的实践。
实际上,使用pip进行可重现构建的方法总是如此
pip freeze > requirements.txt
并检查结果。这样,第三方软件包更新不会破坏您的构建,您可以随时手动升级(并检查结果)。