使用pyproject.toml时setuptools无法获取动态版本问题排查
问题原因
python -m build默认启用隔离构建模式,在这个模式下,构建环境仅包含pyproject.toml中[build-system]指定的依赖(这里只有setuptools),无法访问本地的invperc模块。当setuptools尝试读取invperc.__version__失败时,会自动 fallback 到默认版本号0.0.0,导致生成的分发文件名称版本错误。而安装后包内的__init__.py正常包含版本信息,因此导入时能获取正确的0.2.0。
解决方案
方案一:禁用隔离构建
执行build命令时添加--no-isolation参数,让构建过程使用当前环境的依赖并访问本地模块:
python -m build --no-isolation
这样setuptools就能正确读取invperc.__version__,生成版本号为0.2.0的分发文件。
方案二:使用setuptools-scm自动管理版本(可选)
如果希望基于Git标签自动生成版本号,避免手动维护__version__,可以使用setuptools-scm:
- 修改
pyproject.toml的构建依赖和动态版本配置:
[build-system] requires = ["setuptools", "setuptools-scm"] build-backend = "setuptools.build_meta" [project] dynamic = ["version"] [tools.setuptools.dynamic] version = {scm = true}
- 确保项目是Git仓库,并且已打上对应版本标签(例如
v0.2.0),执行python -m build即可自动生成对应版本的分发文件。
内容的提问来源于stack exchange,提问作者Greg Wilson
相关产品推荐
相关产品推荐

