如何使用setuptools_scm?

问题描述 投票:0回答:1

我不太明白如何使用

setuptools-scm

据我了解,这个工具应该根据SCM(在我的例子中是git)历史记录得出版本号。它基本上使用距最新标签的距离来获取此信息。

现在,假设我有一个项目,我们在其中工作:我们有

main
develop
分支。我们与 SemVer 合作,因此我们有一个
x.y.z
版本模式。现在,每当我们承诺
develop
时,我们都希望在我们的包注册表中拥有最新的包。因此,如果主分支上的最新版本是
1.2.3
,我们希望获得
1.2.3.dev1
1.2.3.dev2
等。

我实际看到的情况是,如果我将

1.2.3
作为我的最新标签,setuptools-scm 会将下一个版本定义为
1.2.4
,另外,它会向版本添加
+g532hj..
,例如
 之类的注册表PyPI Test
例如不接受。

有人能具体解释一下它是如何使用的吗?

python pip python-packaging
1个回答
7
投票

是的,

setuptools-scm
的行为令人惊讶且难以理解,虽然文档没有(在我看来)适当强调它,但它已记录在案就在那里

问题是,

setuptools-scm
获取当前版本如果您处于标记提交中,当您不在标记提交中时(大多数时候)它会非常努力地“猜测”下一个版本,将其分为两部分,“版本”和“本地”部分,格式为
{version}+{local}
,两者都可以配置

{version}
部分由
version_scheme
指令控制,默认情况下:

自动猜测下一个开发版本(默认)。猜测 通过增加预发布段来发布即将发布的版本,如果 存在,否则通过增加微段。然后追加 .devN。如果标签以 .dev0 结尾,则版本不会被更改并且 自定义 .devN 版本将触发错误。

{local}
部分由
local_scheme
指令控制,默认情况下:

在开发版本上添加节点以及脏工作目录上的日期(默认)

不幸的是,没有一个

version_scheme
的值能够完全执行你想要的操作(添加一个简单的
.devX
),但你可以使用其中之一:

  • post-release

生成发布后版本(添加.postN)

  • no-guess-dev

不猜测下一个版本,只是添加.post1.devN

关于

{local}
部分,您可以使用
local_scheme
中的值
no-local-version
完全禁用它。

省略本地版本,有用,例如因为pypi不支持

希望这有帮助。

编辑:抱歉,我的第一篇文章非常不完整,因为我一开始完全错过了

local_scheme
部分。

© www.soinside.com 2019 - 2024. All rights reserved.