如何使用 setuptools_scm 使用发布分支来增加版本?

Kim*_*cks 6 python git setuptools-scm

我正在查看https://github.com/pypa/setuptools_scm

\n

我读了这部分https://github.com/pypa/setuptools_scm#version-number-construction

\n

我引用

\n
\n

具有发布分支的项目的语义版本控制。如果在发布分支上,则与guess-next-dev(增加预发布或微段)相同:分支的名称(忽略命名空间)解析为与最新标签匹配的版本,直至次要段。否则,如果在非发布分支上,则增加次要段并将微段设置为零,然后附加 .devN。

\n
\n

这是如何运作的?

\n

假设我的设置在此提交https://github.com/simkimsia/test-setup-py/commit/5ebab14b16b63090ad0554ad8f9a77a28b047323

\n

和相同的存储库,我如何通过分支来增加版本?

\n

我在 2022-03-15 尝试过什么

\n

我更新了主分支上的一些文件。

\n

然后我做了以下事情

\n
python -m pip install --upgrade "pip ~= 21.3"\n\npip install pip-tools "pip-tools ~= 6.5"\n\ngit init .\n\ngit add .\ngit commit -m \'\xe2\x99\xbb\xef\xb8\x8f REFACTOR\'\ngit tag -a v0.0.0 -m \' First tag v0.0.0\'\n\npip-compile\n\npip-sync\n\npip install -e .\n
Run Code Online (Sandbox Code Playgroud)\n

然后我推送我的更改,包括标签

\n

所以这个提交是https://github.com/simkimsia/test-setup-py/commit/75838db70747fd06cc190218562d0548baa16e9d

\n

当我运行时python -m demopublicpythonproject显示的版本是正确的

\n

在此输入图像描述

\n

此处显示的版本号基于https://github.com/simkimsia/test-setup-py/blob/75838db70747fd06cc190218562d0548baa16e9d/demopublicpythonproject/framework/__init__.py#L14

\n

然后我分支

\n
git checkout -b v0.0.1\n
Run Code Online (Sandbox Code Playgroud)\n

然后我添加了 pyproject.toml 并设置为release-branch

\n
# pyproject.toml\n[build-system]\nrequires = ["setuptools>=45", "setuptools_scm[toml]>=6.2"]\nversion_scheme = "release-branch-semver"\n
Run Code Online (Sandbox Code Playgroud)\n

请参阅https://github.com/simkimsia/test-setup-py/blob/v0.0.1/pyproject.toml

\n

然后我跑

\n
python -m setuptools_scm\n
Run Code Online (Sandbox Code Playgroud)\n

我明白了

\n
/Users/kimsia/.venv/test-setup-py-py3812/bin/python: No module named setuptools_scm\n
Run Code Online (Sandbox Code Playgroud)\n

无论如何,我运行以下命令

\n
pip-compile\n\npip-sync\n\npip install -e .\n\ngit commit -m \'Attempt to do branch semver\'\n
Run Code Online (Sandbox Code Playgroud)\n

然后我得到了这个提交https://github.com/simkimsia/test-setup-py/commit/527885531afe37014dc66432a43a402ec0808caa

\n

当我跑步时python -m demopublicpythonproject我得到这个图像

\n

在此输入图像描述

\n

该版本似乎是根据分支号进行的,但我可能是错的,因为最新的标签是 v0.0.0

\n

所以我

\n
git checkout -b main\ngit checkout -b v0.1.0\npip-sync\npip install -e .      \npython -m demopublicpythonproject\n
Run Code Online (Sandbox Code Playgroud)\n

我得到了不同的版本号

\n

0.0.1.dev1+g45f5696 但不是 0.1.0

\n

aar*_*ron 4

分支mainv0.1.0没有 pyproject.toml,因此您需要添加该文件。

version_scheme应该在下面[tool.setuptools_scm]而不是[build-system]

# pyproject.toml
[build-system]
requires = ["setuptools>=45", "setuptools_scm[toml]>=6.2"]

[tool.setuptools_scm]
version_scheme = "release-branch-semver"
Run Code Online (Sandbox Code Playgroud)

这会给你0.1.0.dev1+g45f5696

您可以在本地查看版本号:

# pyproject.toml
[build-system]
requires = ["setuptools>=45", "setuptools_scm[toml]>=6.2"]

[tool.setuptools_scm]
version_scheme = "release-branch-semver"
Run Code Online (Sandbox Code Playgroud)

发布分支

python setup.py --version
Run Code Online (Sandbox Code Playgroud)

如果您位于发布分支(例如v0.1release-0.1),则补丁版本会增加。

如果您位于main功能分支上,则次要版本会被提升。

标签名称和分支名称不应完全相同。
发布分支名称通常只包含次要版本:

git checkout -b main
git checkout -b v0.1.0
Run Code Online (Sandbox Code Playgroud)

pip-tools + setuptools_scm

由于setup.cfg只有setuptools_scminsetup_requires和 not install_requires, pip-compile(without options) 不会将其编译到 requests.txt 中并且pip-sync会卸载setuptools-scm,所以你必须pip install setuptools_scmafter pip-sync

或者,您可以添加setup = setuptools_scm[options.extras_require]

# setup.cfg
...

[options]
setup_requires = setuptools_scm
...

[options.extras_require]
setup = setuptools_scm
Run Code Online (Sandbox Code Playgroud)

用法:

git checkout -b v0.1
Run Code Online (Sandbox Code Playgroud)

参考:

发布版本

setuptools_scm主要生成开发版本和发布后版本。

要生成像这样的发布版本0.1.0,您可以将可调用对象传递给use_scm_version

# setup.cfg
...

[options]
setup_requires = setuptools_scm
...

[options.extras_require]
setup = setuptools_scm
Run Code Online (Sandbox Code Playgroud)

参考: https: //github.com/pypa/setuptools_scm#importing-in-setuppy