python - 如何使用 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 以消除自发布以来具有相同提交数量的多个开发版本。
但这让我不确定以下问题:
- 如何启用预版本?
- 如果因为 pbr 似乎说至少其中一个是 pbr 正常工作所必需的,那么如果没有标签或在 repo 中怎么办?
- 如何删除
dev1207
我的版本的一部分? - 如何设置
setup.cfg
从我的版本读取版本,main.py
而不是我必须在setup.cfg
文件中指定它?
解决方案
默认情况下,PBR 中启用了 Preversioning 和 postversioning,并且基于字符串语义。可以在此处找到有关最新 SemVer 版本控制标准的更多信息。
不过,我认为您正在寻找的是如何从 git 更新版本。为此,只需添加一个带有 SemVer 字符串的标签,例如v1.0.1
,甚至只是1.0.1
. 其他选项 - 请参阅上面的 SemVer 文档。
PBR 将使用它可以找到的最新标签 - 我相信当前签出的分支。如果它没有找到有效的标签(你的 repo 似乎就是这种情况),它肯定首先默认为 0.0.1,但似乎也恢复为使用setup.cfg
.
一旦它有了那个版本,如果在最后一个标记版本之后有任何提交,它.devN
会在版本字符串后附加一个后缀,为每个未标记的提交增加它。
所以,我猜你有一个大型的 master 分支,有 1209 次提交,但没有标签?反正就是这样。
当你有一个版本时就开始标记你的提交,或者坚持使用 devN 风格的版本。这真的取决于你。
推荐阅读
- python - 如何在 Python 中生成月份名称作为列表?
- ffmpeg - 当多个循环输入缓冲区中的任何一个溢出时如何使ffmpeg失败
- amazon-web-services - nginx 入口控制器显示在 AWS EKS 中运行,但运行状况检查显示 OutOfService
- function - Go - exec.Command() 但对于字符串切片
- api - 工件 REST API 归档条目列表
- python - 如何加密和解密电子邮件地址以匿名数据
- c# - 值 0 (int32) 的 CIL 指令“isinst [System.Runtime]System.Int32” - 将返回什么?
- python - 在 Python 中读取 .xlsx 文件(日期和时间格式不正确)
- autohotkey - 如何将纯文本绑定到键
- php - 旧项目 ZF2 - ServiceManager 中的错误