如何在setuptools_scm中使用符合PEP440规范的Beta发布标签
setuptools_scm 适配PEP 440风格Beta标签的可行方案
setuptools_scm 5.0.1版本触发invalid literal for int() with base 10: '3b0'报错的核心原因,是内置默认标签解析正则未对预发布后缀做独立分组处理,会将标签中第三段的3b0整体识别为补丁版本号,直接传入整数转换逻辑触发报错。对应可落地的调整方案如下:
- 自定义标签解析规则
在项目pyproject.toml的tool.setuptools_scm配置块中,替换默认的tag_regex参数,将版本结构按PEP 440规范做强制分组拆分:让主版本的主、次、补丁段分别匹配纯数字内容,将a/b/rc加数字的预发布部分设为独立的可选分组,避免预发布后缀混入补丁版本的数字匹配范围。参考配置示例:
调整后正则会自动识别[tool.setuptools_scm] tag_regex = "^v(?P<version>(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)(?P<pre>(a|b|rc)\\d+)?)$"v0.1.3b0这类标签,拆分出补丁版本为整数3,预发布标识为b0,不再触发整数转换报错。 - 严格对齐标签命名规范
打Git标签时不要将预发布标识插入版本号的分隔符之间,例如禁止使用v0.1.3.b0这类格式的标签——这类标签会让解析逻辑将3识别为补丁版本,孤立的b0后缀无法匹配到预发布分组,依然会触发转换错误。所有预发布标签需紧贴补丁版本号书写,符合v<主版本>.<次版本>.<补丁版本><预发布标识><序号>的格式,例如Beta标签v0.1.3b0、RC标签v0.1.3rc1。 - 验证配置有效性
配置完成后在项目根目录运行本地版本扫描命令,确认扫描输出的版本号与标签完全一致:当仓库存在v0.1.3b0标签时,命令输出应直接返回0.1.3b0,即代表配置生效。
注意:setuptools_scm 5.0.1原生就支持PEP 440定义的预发布版本语义,上述调整仅需修正默认正则的分组逻辑,不需要额外引入插件或修改版本发布的核心流程,调整后即可正常识别Alpha、Beta、RC全系列预发布标签。
内容的提问来源于stack exchange,提问作者Guy Middleton
相关产品推荐
相关产品推荐

