Python PEP440兼容和git描述部署包中可用的信息

Python PEP440兼容和git描述部署包中可用的信息,python,git,continuous-integration,Python,Git,Continuous Integration,我希望使用符合PEP440的版本标识,但要包含git信息: $ git describe --long 4.1-202-gab0f789 在PEP 440中有一章是关于.devN后缀如何保存非数字散列的,但我不清楚:ab0f789。我需要一种方法从我的一个生产脚本请求4.1-202-gab0f789信息,因此在setup.py中可以将项目元数据放在哪里?该部分告诉您不要使用散列: 由于哈希无法可靠排序公共版本字段中不允许使用此类版本。 我的 他们提供.devN作为替代方案。如果要从git存储库

我希望使用符合PEP440的版本标识,但要包含git信息:

$ git describe --long
4.1-202-gab0f789

在PEP 440中有一章是关于.devN后缀如何保存非数字散列的,但我不清楚:
ab0f789
。我需要一种方法从我的一个生产脚本请求
4.1-202-gab0f789
信息,因此在
setup.py
中可以将项目元数据放在哪里?

该部分告诉您不要使用散列:

由于哈希无法可靠排序公共版本字段中不允许使用此类版本。

我的

他们提供
.devN
作为替代方案。如果要从git存储库中发布开发人员版本,请对它们进行编号,以便
.dev0
.dev1
等。您可以使用标记跟踪这些版本,并将它们跟踪回特定的版本

但是如果你继续读下去,有一种方法可以把散列作为一个:

标识散列信息也可以包括在本地版本标签中

添加一个
+
,然后添加您的哈希(前缀为
g
,以确保不会将全数字哈希作为数字进行比较):

但是,只有在创建本地非索引打包或安装项目时,才应使用本地版本号。例如,不要将带有
+
的版本放在PyPI上。但是,如果您从持续集成服务器生成包供开发人员测试,本地版本号就可以了


在基于非标记git提交的版本中,使用该确切方案包括git哈希。

使用
dev
附录的问题在于,例如
4.1dev0+gab0f789
4.1
发布之前在语义上是,虽然
git descripe
中的
4.1-202-gab0f789
实际上意味着它在
4.1
之后
.devN
后缀不应该有散列,因为每个共享的链接“散列无法可靠排序”。太好了,因此,在我的示例中,我可以使用4.1.dev202+gab0f789。对于任何计划实际依赖它的人,请注意,如果所有字符恰好都是数字,则当前pip会从
+
后面的零件中删除前导0。因此
4.1.dev0+0069692
将在
pip安装
上自动转换为
4.1.dev0+69692
。我建议使用类似于
{X}.{Y}.dev{Z}+git{SHA}
的东西来代替。@RuRo这就是
g
在我的答案中的作用。@MartijnPieters啊,我想
g
不是有效的SHA字符。我错过了。我仍然认为,最好明确地提到这一点。另外,下一段讨论的是
+
,而不是
+g
>@RuRo:updated使其更加明确。“after”在这里比“behind”更适合使用。Behind也意味着“比”更老,如:在时间上更远。。。使用
dev
后面的数字按年龄排序,其中n是距离标签的距离
4.1.dev0+gab0f789