符合 PEP440 并且 git 描述了已部署包中可用的信息

PEP440 compliant AND git describe info available from deployed package

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

$ git describe --long
4.1-202-gab0f789

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

该部分告诉您不要使用哈希:

As hashes cannot be ordered reliably such versions are not permitted in the public version field.

强调我的。

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

但是如果您继续阅读,有一种方法可以将散列添加为 local version number:

Identifying hash information may also be included in local version labels.

添加一个 +,然后是你的散列(以 g 为前缀以确保不将全 digit 散列作为数字进行比较):

4.1.dev0+gab0f789

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

setuptools-scm project 使用该方案在基于非标记 git 提交的版本中包含 git 哈希。

为此使用 dev 附录的问题在于,例如 4.1dev0+gab0f789 在语义上 之前 4.1 发布,而 4.1-202-gab0f789 来自 git describe 实际上意味着它是 202 commits behind 4.1.