我有一个 PEP 440 版本说明符,例如
">=1.0,<2.0"
,它定义了 Python 包的一系列有效版本。我想生成一个与此说明符匹配的示例版本列表。
例如,如果说明符是
">=1.0,<2.0"
,一些有效的示例版本可以是 1.0.1
、1.5.3
或 1.9.9
。无效的示例版本可能是 0.9.5
、2.0.0
或 3.0.0
.
在 Python (3.10) 中生成此类示例版本的最简单方法是什么?我应该使用正则表达式、打包库还是其他一些方法?
我目前的方法是在逗号处添加
split
并从版本说明符中删除比较运算符,然后try
从中创建一个Version
。
在下面的示例中,我允许无效版本,因为我不介意它们用于我的用例。
from packaging.version import Version, InvalidVersion
comp_ops = ["===", "~=", "<=", ">=", "!=", "==", "<", ">"] # order matters
version_spec = ">=1.0,<2.0"
versions = []
for v in version_spec.split(','):
version = v
for op in comp_ops:
version = version.removeprefix(op)
try:
versions.append(Version(version))
except InvalidVersion:
pass