当包指定范围而另一个不指定范围时,依赖解析如何与pip一起使用?

问题描述 投票:1回答:1

我有一个只有2个依赖项的requirements.txt:

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中指定依赖项版本的含义是什么? “强制推出最新版本”?

python pip setuptools install-requires
1个回答
1
投票

你观察到这种行为的原因是因为pip首先安装了sentry-sdk。由于这没有版本约束,因此您将获得最新版本(1.25)。当要安装requests时,此版本不兼容。

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

解决方案是在requirements.txt中指定所需的urllib3版本(因为您知道它使用的依赖项版本)。对于没有约束的瞬态包,这可能是很好的实践。

实际上,使用pip进行可重现构建的方法总是如此

pip freeze > requirements.txt

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

© www.soinside.com 2019 - 2024. All rights reserved.