Python中packaging.version.parse判断版本通配符匹配结果不符合预期
解答
- 这不是packaging库的bug,属于用法错误。
- 核心原因:
packaging.version.parse的设计定位是解析单个符合PEP 440规范的具体版本号,不支持处理带通配符的版本范围规则。
你传入1.2.*时,该方法会将其识别为非标准的遗留版本格式:- 相等判断是对比两个版本对象是否完全一致,
1.2.3和1.2.*解析后的版本对象本身就不相同,所以返回False - 排序规则上,非标准遗留版本的优先级低于正式发布版本,所以
parse('1.2.3') > parse('1.2.*')返回True,符合库本身的设计逻辑
- 相等判断是对比两个版本对象是否完全一致,
- 正确的版本范围校验方式:
需要搭配packaging.specifiers.SpecifierSet实现范围匹配,示例代码如下:from packaging.version import parse from packaging.specifiers import SpecifierSet # 声明版本匹配规则 spec = SpecifierSet("==1.2.*") # 校验版本是否符合范围 print(parse("1.2.3") in spec) # 输出结果为 True,符合预期
内容的提问来源于stack exchange,提问作者Bernd Prager
相关产品推荐
相关产品推荐

