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

如何在Python项目中实现类似CMake的单源版本控制?

Python项目单源版本控制方案(对标CMake风格)

我习惯用CMake给C/C++项目实现单源版本控制:
在CMakeLists.txt中写入:

project(Tutorial VERSION 1.0)

随后在*.h.in文件中使用占位符:

#define ver_maj @Tutorial_VERSION_MAJOR@
#define ver_min @Tutorial_VERSION_MINOR@

经configure_file()处理后,会生成对应的头文件:

#define ver_maj 1
#define ver_min 0

之后项目中任何需要访问版本号的地方直接引入该头文件即可。

但Python项目的体验完全不同,我常因忘记同步pyproject.toml和<module>/__init__.py中的版本号而重复构建。以下是实现类似CMake风格单源版本控制的几种首选方式:

方式一:标准库动态读取(无额外依赖)

只在pyproject.toml中维护版本号,代码通过Python标准库importlib.metadata动态读取已安装包的版本,无需手动同步__init__.py:

# <module>/__init__.py
from importlib.metadata import version, PackageNotFoundError

try:
    __version__ = version("your-package-name")
except PackageNotFoundError:
    # 本地开发时包未安装的 fallback
    __version__ = "0.0.0-dev"

注意your-package-name必须和pyproject.toml中project.name字段完全一致。

方式二:用setuptools-scm自动生成版本(自动化首选)

无需手动编写版本号,直接从Git标签、提交记录自动生成版本,同时同步pyproject.toml和代码中的版本:

  1. 在pyproject.toml中配置依赖和动态版本:
[build-system]
requires = ["setuptools>=61.0", "setuptools-scm"]
build-backend = "setuptools.build_meta"

[project]
dynamic = ["version"]

[tool.setuptools_scm]
# 可选配置:自定义版本格式、本地开发标记等
  1. 在__init__.py中引入自动生成的版本:
from ._version import __version__

执行构建时,setuptools-scm会自动生成_version.py文件,同时pyproject.toml的版本也会自动同步。

方式三:手动维护单一源文件,用工具同步

如果偏好手动控制版本号,可以单独维护一个纯版本文件(比如VERSION,内容仅为1.0.0),再用工具同步到pyproject.toml和__init__.py。以bump2version为例:

  1. 安装工具:pip install bump2version
  2. 配置.bumpversion.cfg:
[bumpversion]
current_version = 1.0.0
commit = True
tag = True

[bumpversion:file:pyproject.toml]
search = version = "{current_version}"
replace = version = "{new_version}"

[bumpversion:file:your_module/__init__.py]
search = __version__ = "{current_version}"
replace = __version__ = "{new_version}"
  1. 更新版本时执行命令:bump2version patch(或minor/major),工具会自动更新所有配置文件中的版本号。

内容的提问来源于stack exchange,提问作者David Banas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:46:18