首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用发布分支增加版本使用setuptools_scm?

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

Stack Overflow用户
提问于 2022-02-12 09:02:55
回答 3查看 1.4K关注 0票数 5

我在看供应链管理

我读了这部分,scm#版本-编号-构造

我引用一下

具有发布分支的项目的语义版本控制。与在发布分支上增加预发布段或微段相同:一个分支,其名称(忽略名称空间)被解析为与最近的标记相匹配的版本。否则,如果在非释放分支上,增加次要段并将微段设置为零,则追加.devN。

这是怎么回事?

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

同样的回购,我如何通过分支来增加版本?

我在2022-03-15

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

然后我做了以下工作

代码语言:javascript
运行
复制
python -m pip install --upgrade "pip ~= 21.3"

pip install pip-tools "pip-tools ~= 6.5"

git init .

git add .
git commit -m '♻️ REFACTOR'
git tag -a v0.0.0 -m ' First tag v0.0.0'

pip-compile

pip-sync

pip install -e .

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

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

当我运行python -m demopublicpythonproject时,出现的版本是正确的

这里显示的版本号基于.py#L14

然后我就分叉了

代码语言:javascript
运行
复制
git checkout -b v0.0.1

然后我添加了一个pyproject.toml并将其设置为发布分支。

代码语言:javascript
运行
复制
# pyproject.toml
[build-system]
requires = ["setuptools>=45", "setuptools_scm[toml]>=6.2"]
version_scheme = "release-branch-semver"

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

然后我跑了

代码语言:javascript
运行
复制
python -m setuptools_scm

我得到了

代码语言:javascript
运行
复制
/Users/kimsia/.venv/test-setup-py-py3812/bin/python: No module named setuptools_scm

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

代码语言:javascript
运行
复制
pip-compile

pip-sync

pip install -e .

git commit -m 'Attempt to do branch semver'

然后我就有了这个提交,结果是https://github.com/simkimsia/test-setup-py/commit/527885531afe37014dc66432a43a402ec0808caa

当我运行python -m demopublicpythonproject时,我得到了这个映像

这个版本似乎是基于分支编号的,但我可能错了,因为最新的标记是v0.0.0

所以我

代码语言:javascript
运行
复制
git checkout -b main
git checkout -b v0.1.0
pip-sync
pip install -e .      
python -m demopublicpythonproject

我得到一个不同的版本号

0.0.1.dev1+g45f5696但不是0.1.0

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-03-15 19:38:17

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

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

代码语言:javascript
运行
复制
# pyproject.toml
[build-system]
requires = ["setuptools>=45", "setuptools_scm[toml]>=6.2"]

[tool.setuptools_scm]
version_scheme = "release-branch-semver"

这将给你0.1.0.dev1+g45f5696

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

代码语言:javascript
运行
复制
python setup.py --version

释放枝

git签出-b主git签出-b v0.1.0

如果您在发布分支上(例如v0.1release-0.1),那么补丁版本就会遇到麻烦。

如果您使用的是main或功能分支,则会遇到次要版本。

标记名称和分支名称不应该完全相同。

发布分支名称通常只包含次要版本:

代码语言:javascript
运行
复制
git checkout -b v0.1

pip-tools + setuptools_scm

因为setup.cfgsetup_requires中只有setuptools_scm,而没有install_requires,所以pip-compile (没有选项)不会将它编译成requirements.txt,pip-sync会卸载setuptools-scm,所以必须在pip-sync之后进行pip install setuptools_scm

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

代码语言:javascript
运行
复制
# setup.cfg
...

[options]
setup_requires = setuptools_scm
...

[options.extras_require]
setup = setuptools_scm

用法:

代码语言:javascript
运行
复制
pip-compile --extra setup -o setup-requirements.txt

pip-sync setup-requirements.txt

参考文献:

发行版本

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

要生成像0.1.0这样的发布版本,可以将一个可调用的

代码语言:javascript
运行
复制
# content of setup.py

def myversion():
    from setuptools_scm.version import SEMVER_MINOR, guess_next_simple_semver, release_branch_semver_version

    def my_release_branch_semver_version(version):
        v = release_branch_semver_version(version)
        if v == version.format_next_version(guess_next_simple_semver, retain=SEMVER_MINOR):
            return version.format_next_version(guess_next_simple_semver, fmt="{guessed}", retain=SEMVER_MINOR)
        return v

    return {
        'version_scheme': my_release_branch_semver_version,
        'local_scheme': 'no-local-version',
    }


setup(use_scm_version=myversion)

参考资料:scm#导入setuppy

票数 3
EN

Stack Overflow用户

发布于 2022-03-14 16:34:48

可以通过在变量中设置相应的pyproject.toml来更改版本方案。

代码语言:javascript
运行
复制
[tool.setuptools_scm]
version_scheme = "release-branch-semver"

然后,可以创建具有SemVer名称的分支,以增加版本号。例如:

代码语言:javascript
运行
复制
$ git tag 
v1.0.0
$ git checkout main 
Already on 'main'
$ python -m setuptools_scm
1.1.0.dev1+gdaf07ef
$ git checkout -b 1.0.1
Switched to a new branch '1.0.1'
$ python -m setuptools_scm
1.0.1.dev1+gdaf07ef

如果您使用的是setup.py,您可以按照以下方式配置它:

代码语言:javascript
运行
复制
setup(
    use_scm_version={
        'version_scheme': 'release-branch-semver',
    },
)
票数 2
EN

Stack Overflow用户

发布于 2022-03-13 15:39:29

如果我正确地读取了文档,这很可能意味着您应该像这样创建分支(假设当前版本为0.x):

代码语言:javascript
运行
复制
main (main development branch)
1.0 (release branch for 1.0)
2.0 (development branch for 2.0)

我的理解是,这是这样的分析:

医生说

具有发布分支的项目的语义版本控制。与在发布分支上增加预发布段或微段相同:一个分支,其名称(忽略名称空间)被解析为与最近的标记相匹配的版本。否则,如果在非释放分支上,增加次要段并将微段设置为零,则追加.devN。

我对此的理解是:

你想做一个新版本。所以你把它放在一个叫做2.0的分支上。由于程序知道您的上一个版本是2.0.0,所以您的新版本将被称为2.0.1

基本上,它会自动增加版本标签上的微版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71090408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档