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\n具有发布分支的项目的语义版本控制。如果在发布分支上,则与guess-next-dev(增加预发布或微段)相同:分支的名称(忽略命名空间)解析为与最新标签匹配的版本,直至次要段。否则,如果在非发布分支上,则增加次要段并将微段设置为零,然后附加 .devN。
\n
这是如何运作的?
\n假设我的设置在此提交https://github.com/simkimsia/test-setup-py/commit/5ebab14b16b63090ad0554ad8f9a77a28b047323
\n和相同的存储库,我如何通过分支来增加版本?
\n我更新了主分支上的一些文件。
\n然后我做了以下事情
\npython -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 .\nRun Code Online (Sandbox Code Playgroud)\n然后我推送我的更改,包括标签
\n所以这个提交是https://github.com/simkimsia/test-setup-py/commit/75838db70747fd06cc190218562d0548baa16e9d
\n当我运行时python -m demopublicpythonproject显示的版本是正确的
然后我分支
\ngit checkout -b v0.0.1\nRun 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"\nRun Code Online (Sandbox Code Playgroud)\n请参阅https://github.com/simkimsia/test-setup-py/blob/v0.0.1/pyproject.toml
\n然后我跑
\npython -m setuptools_scm\nRun Code Online (Sandbox Code Playgroud)\n我明白了
\n/Users/kimsia/.venv/test-setup-py-py3812/bin/python: No module named setuptools_scm\nRun Code Online (Sandbox Code Playgroud)\n无论如何,我运行以下命令
\npip-compile\n\npip-sync\n\npip install -e .\n\ngit commit -m \'Attempt to do branch semver\'\nRun Code Online (Sandbox Code Playgroud)\n然后我得到了这个提交https://github.com/simkimsia/test-setup-py/commit/527885531afe37014dc66432a43a402ec0808caa
\n当我跑步时python -m demopublicpythonproject我得到这个图像
该版本似乎是根据分支号进行的,但我可能是错的,因为最新的标签是 v0.0.0
\n所以我
\ngit checkout -b main\ngit checkout -b v0.1.0\npip-sync\npip install -e . \npython -m demopublicpythonproject\nRun Code Online (Sandbox Code Playgroud)\n我得到了不同的版本号
\n0.0.1.dev1+g45f5696 但不是 0.1.0
\n分支main并v0.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)
Run Code Online (Sandbox Code Playgroud)python setup.py --version
如果您位于发布分支(例如v0.1,release-0.1),则补丁版本会增加。
如果您位于main功能分支上,则次要版本会被提升。
标签名称和分支名称不应完全相同。
发布分支名称通常只包含次要版本:
git checkout -b main
git checkout -b v0.1.0
Run Code Online (Sandbox Code Playgroud)
由于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