为何setuptools_scm判定0.10.0版本早于0.9.3?
解决setuptools_scm版本排序及Git标签显示问题
问题根源
不管是setuptools_scm还是Git默认的标签排序,用的都是字符串字典序,而非语义化版本的排序规则。字符串逐字符对比时,0.10.0和0.9.3会在第三个字符处(1 vs 9)判定0.10.0更早,这和我们的语义预期不符。
解决步骤
1. 让Git按语义化版本排序标签
执行以下命令查看标签,就能得到正确的版本顺序:
git tag -l --sort='version:refname'
执行后0.10.0会排在0.9.3之后。如果你的标签带v前缀,也可以用--sort='v:refname'。
2. 配置setuptools_scm使用语义化版本规则
setuptools_scm依赖packaging库处理版本对比,只需确保配置正确:
- 先安装
packaging:pip install packaging - 在
pyproject.toml中添加setuptools_scm配置:
这样setuptools_scm就会按照语义化版本逻辑判定[tool.setuptools_scm] version_scheme = "semver" local_scheme = "no-local-version"0.10.0高于0.9.3。
3. 快速验证版本对比逻辑
可以用packaging库直接验证:
from packaging.version import Version v_old = Version("0.9.3") v_new = Version("0.10.0") print(v_new > v_old) # 输出True即为正确
内容的提问来源于stack exchange,提问作者yuenherny
相关产品推荐
相关产品推荐

