如何使用setuptools_scm?

Yoa*_*ein 12 python pip python-packaging

我不太明白如何使用setuptools-scm

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

现在,假设我有一个项目,我们在其中工作:我们有maindevelop分支。我们使用 SemVer,因此我们有一个x.y.z版本模式。现在,每当我们提交时develop,我们都希望在我们的包注册表中拥有最新的包。因此,如果主分支上的最新版本是1.2.3例如,我们希望获得1.2.3.dev11.2.3.dev2等。

我实际看到发生的情况是,如果我有1.2.3最新的标签,setuptools-scm 会将下一个版本定义为1.2.4,另外,它会在版本中添加+g532hj..,而注册表等注册表PyPI Test不接受该版本。

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

Ter*_*eus 10

是的,这种行为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_schemevalue完全禁用它no-local-version

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

希望这可以帮助。

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