如何生成与 Python 中的 PEP 440 版本说明符匹配的示例版本?

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

我有一个 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
python regex version packaging
© www.soinside.com 2019 - 2024. All rights reserved.