python -m build生成安装包文件名版本号错误如何解决
问题根因
你把版本号写在了[bumpver]配置段里,这个段是第三方版本管理工具bumpver的专属配置,setuptools(也就是build命令默认调用的打包后端)根本不会识别这个段下的current_version字段。
你的[metadata]段里完全没有配置version字段,setuptools找不到显式声明的版本号时,默认就会 fallback 到0.0.0,这就是生成的安装包版本全错的原因。
setuptools 默认读取版本号的位置
按优先级从高到低排序:
setup.py中setup()函数传入的version参数setup.cfg中[metadata]段下的version字段pyproject.toml中[project]表下的version字段- 如果以上位置都没有显式配置,setuptools会尝试从项目内的
__version__变量、Git/Hg等版本控制工具的标签提取版本,全部提取失败就返回默认值0.0.0
修复步骤
选最适配你当前配置的方案即可,推荐第一种改法,改动最小:
方案1:补全setup.cfg的元数据配置,让bumpver同步更新版本
- 在
[metadata]段下新增version字段,填你当前的版本号 - 修改bumpver的文件匹配规则,让它升版本时同步更新setuptools识别的
version字段,不用手动维护两处版本
修改后的完整setup.cfg参考:
[metadata] # 包元数据,setuptools直接读取这部分 name = stockpyl version = 0.0.1 # 你之前缺失的必填版本字段 [options] package_dir= =src packages=find: [options.packages.find] where=src [bumpver] current_version = "0.0.1" version_pattern = "MAJOR.MINOR.PATCH" commit_message = "bump version {old_version} -> {new_version}" commit = True tag = True push = False [bumpver:file_patterns] setup.cfg = current_version = "{version}" version = "{version}" # 新增这行,让bumpver同步更新[metadata]下的版本号
改完重新执行python -m build,就能生成版本号正确的tar.gz和whl包了。后续用bumpver升级版本时,两个版本字段会自动同步,不会再出现版本不一致的问题。
方案2:配置动态版本读取(可选)
如果不想手动维护版本字段,也可以配置setuptools直接从Git标签、或者项目代码的__version__属性读取版本,不过对你当前的项目结构来说,方案1的改造成本最低,也最不容易出配置错误。
内容的提问来源于stack exchange,提问作者LarrySnyder610
相关产品推荐
相关产品推荐

