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 = "<projectname>"dynamic = ["version"] # ← 标记版本dynamicdependencies = ["incremental>=24.7.2", # ← 运行时依赖增量]# ...[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 = "<projectname>"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 <projectname> --create 。它将在您的包中创建一个名为_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 <projectname>将对该包执行更新。之后可以给出的命令决定了下一个版本是什么。
--newversion=<version> ,将项目版本设置为完全指定的版本(例如 1.2.3 或 17.1.0dev1)。
--rc ,如果当前版本不是候选版本,则将项目版本设置为<year-2000>.<month>.0rc1如果是,则将候选版本编号增加 1。
--dev ,如果不是开发版本,则将项目开发版本号设置为 0,如果是,则将开发版本号增加 1。
--patch ,增加发行版的补丁号。这还将重置候选版本号,同时传递--rc以增加补丁号并使其成为候选版本。
--post ,如果不是后期发布,则将项目后期发布编号设置为 0,如果是,则将后期发布编号增加 1。这还将重置候选版本和开发版本号。
如果您不提供任何参数,它将删除候选版本号,使其成为“完整版本”。
增量支持“不确定”版本,作为下一个“完整”版本的替代。当将向最终用户显示的版本未知时(例如“引入”或“弃用”),可以使用此选项。增量支持以下不确定版本:
Version("<projectname>", "NEXT", 0, 0)
<projectname> NEXT
当您运行incremental update <projectname> --rc时,这些将更新为真实版本(假设目标最终版本是 17.1.0):
Version("<projectname>", 17, 1, 0, release_candidate=1)
<projectname> 17.1.0rc1
一旦最终版本制作完成,它将变成:
Version("<projectname>", 17, 1, 0)
<projectname> 17.1.0