You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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同步更新版本

  1. 在[metadata]段下新增version字段,填你当前的版本号
  2. 修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 04:21:33