Incremental 是一个支持未来的 CalVer 版本管理器。
API 文档可以在这里找到。叙述性文档如下。
内容
操作原理
快速入门
使用安装工具
使用幼体
使用setup.py
初始化项目
运行时集成
增量版本
更新中
不确定版本
版本号的格式为 YY.MM.PATCH。
如果您的项目名为“Shrubbery”,则其代码位于shrubbery/
或src/shrubbery/
中。
增量将项目的版本号存储在{src/}shrubbery/_version.py
中。
要更新版本,请运行incremental update Shrubbery
,并根据需要传递--rc
和/或--patch
(请参阅下面的更新)。
更改版本还会更新代码库中的任何不确定版本,例如“Shrubbery NEXT”,因此您可以在文档中引用即将发布的版本。这就是增量支持未来的方式。
将 Incremental 添加到您的pyproject.toml
:
[build-system]requires = ["setuptools","incremental>=24.7.2", # ← 添加增量作为构建依赖项]build-backend = "setuptools.build_meta"[project]name = ""dynamic = ["version"] # ← 标记版本dynamicdependencies = ["incremental>=24.7.2", # ← 运行时依赖incremental]# ...[tool.incremental] # ← 激活Incremental的setuptools插件
如果[tool.incremental]
表为空也没关系,但它必须存在。
删除任何[project] version =
条目和任何[tool.setuptools.dynamic] version =
条目。
接下来,初始化项目。
如果您使用 Hatchling 来打包您的项目,请通过更改pyproject.toml
来激活 Incremental 的 Hatchling 插件:
[build-system]requires = ["hatchling","incremental>=24.7.2", # ← 添加增量作为构建依赖项]build-backend = "hatchling.build"[project]name = ""dynamic = ["version"] # ← 标记版本dynamicdependencies = ["incremental>=24.7.2", # ← 运行时依赖增量]# ...[tool.hatch.version]source = "incremental" # ← 激活Incremental 的 Hatchling 插件
增量可以像往常一样在可选的[tool.incremental]
表中配置。
hatch version
命令将报告增量管理的版本。使用incremental update
命令更改版本(不支持使用hatch version
设置)。
接下来,初始化项目。
setup.py
可以从setup.py
而不是pyproject.toml
使用增量。将其添加到您的setup()
调用中,删除任何其他版本控制参数:
setup(use_incremental=True,setup_requires=['incremental'],install_requires=['incremental'], # 以及任何其他安装依赖项... }
然后初始化项目。
使用pipx install incremental
将 Incremental 安装到本地环境。然后运行incremental update
。它将在您的包中创建一个名为_version.py
的文件,如下所示:
来自增量导入 Version__version__ = Version("<项目名称>", 24, 1, 0)__all__ = ["__version__"]
项目的后续安装将使用增量进行版本控制。
您可以在包的 API 中公开来自_version.py
的incremental.Version
。为此,请添加到根包的__init__.py
:
从 ._version 导入 __version__
笔记
随着 Python 3.6 中引入 importlib.metadata.version()(可以检索已安装包的版本),提供__version__
属性已不再流行。
如果您不公开公开此对象,也不在包中使用它,则无需在运行时依赖 Incremental。您可以将其从项目的dependencies
项数组中删除(或者在setup.py
中,从install_requires
中删除)。
incremental.Version
是一个表示给定项目版本的类。它由以下元素组成(在实例化期间给出):
package
(必填),此Version
代表的包的名称。
major
、 minor
、 micro
(全部必需),项目Version
的 XYZ 。
release_candidate
(可选),设置为 0 或更高以标记此Version
属于发布候选版本(有时也称为“预发布”)。
post
(可选),设置为 0 或更高以将此Version
标记为发布后版本。
dev
(可选),设置为 0 或更高以将此Version
标记为开发版本。
您可以使用.public()
方法提取 PEP-440 兼容版本字符串,该方法返回包含完整版本的str
。这是您应该提供给用户或公开使用的版本。示例输出为"13.2.0"
、 "17.1.2dev1"
或"18.8.0rc2"
。
使用Version
调用repr()
将给出它的 Python 源代码表示,并且在Version
上调用str()
会生成类似'[Incremental, version 16.10.1]'
的字符串。
Incremental 包含一个工具,可以自动更新使用 Incremental 的项目版本,称为incremental
。它更新_version.py
文件并自动将增量版本的某些用途从不确定版本更新为当前版本。它需要从 PyPI 中click
。
incremental update
将对该包执行更新。之后可以给出的命令决定了下一个版本是什么。
--newversion=
,将项目版本设置为完全指定的版本(例如 1.2.3 或 17.1.0dev1)。
--rc
,如果当前版本不是候选版本,则将项目版本设置为
如果是,则将候选版本编号增加 1。
--dev
,如果不是开发版本,则将项目开发版本号设置为 0,如果是,则将开发版本号增加 1。
--patch
,增加发行版的补丁号。这还将重置候选版本号,同时传递--rc
以增加补丁号并使其成为候选版本。
--post
,如果不是后期发布,则将项目后期发布编号设置为 0,如果是,则将后期发布编号增加 1。这还将重置候选版本和开发版本号。
如果您不提供任何参数,它将删除候选版本号,使其成为“完整版本”。
增量支持“不确定”版本,作为下一个“完整”版本的替代。当将向最终用户显示的版本未知时(例如“引入”或“弃用”),可以使用此选项。增量支持以下不确定版本:
Version("
当您运行incremental update
时,这些将更新为真实版本(假设目标最终版本是 17.1.0):
Version("
一旦最终版本制作完成,它将变成:
Version("