首页 > 解决方案 > 如何使用 pbr 设置 python 包的生产版本

问题描述

对于我的包裹,我有以下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 提交和标签来创建它的版本控制。

在他们的文件中,它指出

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

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

如果当前签出的修订没有标记,那么我们取最后一个标记的版本号并增加它以获得最小目标版本。

然后我们将 git history 带回到上一个版本。在每次提交中,我们都会查找 Sem-Ver: 伪标头,如果找到,则对其进行解析以查找关键字。未知符号不是错误(因此人们不能楔入 pbr 或破坏他们的树),但我们会发出信息级别的警告消息。已知符号:功能、api-break、弃用、错误修复。缺少的 Sem-Ver 行等同于 Sem-Ver:错误修复。错误修正符号会导致版本的补丁级别增加。功能和弃用符号会导致次要版本增加。api-break 符号导致主要版本增量。

如果正在使用 postversioning,我们使用生成的版本号作为目标版本。

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

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

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

  1. 如何启用预版本?
  2. 如果因为 pbr 似乎说至少其中一个是 pbr 正常工作所必需的,那么如果没有标签或在 repo 中怎么办?
  3. 如何删除dev1207我的版本的一部分?
  4. 如何设置setup.cfg从我的版本读取版本,main.py而不是我必须在setup.cfg文件中指定它?

标签: pythonpython-pbr

解决方案


默认情况下,PBR 中启用了 Preversioning 和 postversioning,并且基于字符串语义。可以在此处找到有关最新 SemVer 版本控制标准的更多信息。

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

PBR 将使用它可以找到的最新标签 - 我相信当前签出的分支。如果它没有找到有效的标签(你的 repo 似乎就是这种情况),它肯定首先默认为 0.0.1,但似乎也恢复为使用setup.cfg.

一旦它有了那个版本,如果在最后一个标记版本之后有任何提交,它.devN会在版本字符串后附加一个后缀,为每个未标记的提交增加它。

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

当你有一个版本时就开始标记你的提交,或者坚持使用 devN 风格的版本。这真的取决于你。


推荐阅读