首页 > 解决方案 > 为什么 Pip 声称 Python 的版本不在给定范围内?

问题描述

我正在使用 Python 3.8.7 和最新版本的 Pip v21.0.1。我编写了一个包含以下 Python 版本约束的包:

python_requires='>=3.6, <3.9',

当我尝试安装软件包时,Pip 拒绝并打印以下错误:

ERROR: Package 'my-package' requires a different Python: 3.8.7 not in '<3.9,>=3.6'

在安装具有类似版本约束的其他软件包时,我看到了类似的错误:

ERROR: Package 'my-other-package' requires a different Python: 3.8.7 not in '!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,<3.9,>=2.7'

显然 Python 3.8.7大于3.6 小于 3.9,那么为什么 Pip 声称需要不同版本的 Python?


一些调查表明这可能是一个不准确的错误消息。我已经运行了一个实验,使用具有以下依赖关系的包:

我发现在使用 Python 3.9 安装 package-a 时,我收到以下错误:

ERROR: Package 'package-a' requires a different Python: 3.9.0 not in '>=3.6'

所以基本上,package-a 不能与 Python 3.9 一起安装,因为 package-b 不适用于 Python 3.9;然而,Pip 错误地指出package-a需要一个“不同的”Python,然后错误地打印出 package-a 的版本说明符,而不是 package-b。

我将继续调查,但这可能是 Pip 本身的错误。

标签: pythonpython-3.xpip

解决方案


这是一个错误,pip已在21.1版中修复(参见#9541)。具体来说,当解析失败时,它在错误消息中包含了错误的 Python 约束(依赖项之一)。


推荐阅读