如何使用pbr设置python软件包的生产版本

时间:2019-06-14 06:38:35

标签: python python-pbr

对于我的包裹,我有以下setup.py

import setuptools


setuptools.setup(
    setup_requires=['pbr>=2.0.0'],
    pbr=True
)

当我运行python setup.py sdist时,被标记为tar文件的版本为module-0.0.1.dev1207。如果我将setup.cfg修改为具有以下条目

[metadata]
version = 1.0.1

被标记为tar文件的版本为-1.0.1.dev1207

我对pbr进行了一些阅读,发现它使用git commits和标签来创建其版本。

在他们的Python Wiki上指出

  

可以通过两种方式管理版本-后版本化和前版本化。默认为Postversion,并且可以通过在setup.cfg元数据部分中设置version来启用preversioning。在这两种情况下,版本字符串都是从git推断的。

     

如果标记了当前签出的修订,则将该标记用作版本。

     

如果当前未检出的修订版本未标记,则我们采用最后标记的版本号并将其递增以获得最低目标版本。

     

然后,我们将git历史回溯到最新版本。在每个提交中,我们寻找一个Sem-Ver:伪头,如果找到,则解析它以寻找关键字。未知符号不是错误(以便人们不能踩死或破坏树木),但是我们会发出信息级警告消息。已知符号:功能,api中断,弃用,错误修正。缺少的Sem-Ver行等同于Sem-Ver:错误修正。错误修正符号会导致版本的补丁程序级别增加。功能和弃用符号引起次要版本增量。 api中断符号会导致主版本增加。

     

如果正在使用版本控制,我们将得到的版本号用作目标版本。

     

如果正在使用预转换版本,我们将检查setup.cfg的元数据部分中设置的版本是否大于使用上述方法推断的版本。如果推断的版本大于预转换值,则会引发错误,否则,将使用setup.cfg中的版本作为目标。

     

然后,我们根据自上一发行版以来的提交生成开发版本字符串,并包括当前的git sha,以消除自发行版以来具有相同提交次数的多个开发版本的歧义。

但这使我不确定以下问题:

  1. 如何启用预转换?
  2. 如果自从pbr似乎说至少有一个标签对于pbr正常工作是必要的,那该怎么办呢?
  3. 如何删除版本的dev1207部分?
  4. 如何设置setup.cfg来从我的main.py中读取版本,而不是必须在setup.cfg文件中指定版本?

1 个答案:

答案 0 :(得分:0)

默认情况下,PBR中基于字符串语义启用了预转换和后转换。有关the latest SemVer versioning standard can be found here的更多信息。

不过,我认为您正在寻找的是如何从git更新版本。为此,只需添加带有SemVer字符串的标签,例如v1.0.1甚至只是1.0.1。其他选项-请参见上面的SemVer文档。

PBR将使用它可以找到的最新标签-我相信当前已签出的分支。如果找不到有效的标签(您的存储库似乎是这种情况),则它肯定似乎首先默认为0.0.1,但似乎也恢复为使用{{1}中元数据中的版本字符串}。

具有该版本后,如果在上一个标记的版本之后进行了任何提交,它将在版本字符串后附加一个setup.cfg后缀,对于每个未标记的提交都将其递增。

所以,我猜测您有一个大型主分支,具有1209次提交,但没有标签?反正就是这样。

只有在发布时才开始标记提交,或者坚持使用devN样式的发布。真的取决于你。