python_requires 中的版本条件

问题描述

我们有一个适用于 2.7 和 3.8 版本后的软件包,我们需要保留 2.7 以便为尚未移动的用户提供支持,但是当我在 setup.py 中执行此操作时:

python_requires="== 2.7.*,>= 3.8"

这不起作用,当我在 3.8.11 中安装生成的轮文件时,它说:

ERROR: Package 'mypkg' requires a different Python: 3.8.11 not in '==2.7.*,>=3.8'

为什么 3.8.11 不是 >= 3.8?如何解决这个问题?

解决方法

这是因为逗号 , 在 Python 的 version specifiers 中充当逻辑“与”运算符,并且没有一个版本可以同时匹配 == 2.7.*>= 3.8时间。

不幸的是,版本说明符中没有提供“或”运算符,因此您必须通过彻底排除两个兼容范围之间的已知不兼容版本来解决此问题:

python_requires=">= 2.7,!= 3.0.*,!= 3.1.*,!= 3.2.*,!= 3.3.*,!= 3.4.*,!= 3.5.*,!= 3.6.*,!= 3.7.*"