如何使用Setuptools和PBR更新Python软件包中的git元数据

问题描述 投票:0回答:1

[使用pbr从git repo标签生成的版本

我在从软件包中获取版本信息时遇到问题,该软件包使用扩展名为setuptoolspbr设置为普通的Python软件包。 pbr将从git repo中的标签中提取版本信息,因此只有一个事实来源。

我确实掌握了基本知识-see this Q&A for more info

可以正常工作,如果我完整分发了软件包。例如:py setup.py sdist将创建完整分发,并且git中的version标签和其他元数据将更新。

但是我不需要此软件包的完整发行版,我的团队只是从git repo本地进行开发。我还使用pyinstaller创建主脚本的可执行文件以供用户分发(不需要Python)。因此,我需要一个简单,快速的命令,该命令将基于对git repo的最新更新来更新元数据,而无需花费额外的时间来让SetupTools构建和创建完整的分发程序包,无论如何都不会使用它。

[pbr将从版本库中提取版本(从标签),作者和变更日志信息,因此节省了大量时间,使我们可以将大多数元数据直接保留在git中。

问题

我们可以做任何事情来获取程序包元数据以pbr更新,而无需进行完整分发吗?

特别是版本:

  1. [何时使用setup.py扩展名的pbr实际使用哪个命令或使用哪个命令从git repo更新版本,以便查询该版本的任何命令都将获取更新的版本?
  2. 此设置中实际存储的版本在哪里? (我找不到它...)

更多信息和一些代码

我有一个很短的setup.py,与pbr扩展名一起使用:

#!/usr/bin/env python

from setuptools import setup
setup(
    setup_requires=['pbr', 'setuptools'],
    pbr=True,
)

现在,如果我使用标签更新git repo中的最新提交,则命令py setup.py --version将基于该标签返回新的更新版本,但是我可以找到的任何其他直接方法仍将返回旧版本字符串。因此该命令似乎不会在任何地方存储新版本字符串。

以下是我从软件包__init__.py中尝试过的几种方法:

import pkg_resources  # part of setuptools

v1 = pkg_resources.require("md2mat")[0].version
print('v1 {}'.format(v1))
v2 = pkg_resources.get_distribution('md2mat').version
print('v2 {}'.format(v2))

from pbr.version import VersionInfo

v3 = VersionInfo('md2mat').release_string()
print('v3 {}'.format(v3))

以上所有内容均返回old版本字符串(最后一次进行完整分发)。

所以,除了py setup.py sdist还是类似的完整发行版本的构建命令(bdist,bdist_egg等),我可以做些什么来简单地更新我的软件包信息,因此上述方法将为我提供最新的版本字符串,以及运行主程序包脚本时的其他git元数据?

这将使我们在签出新的提交后以开发人员的身份在本地更新软件包,然后运行pyinstaller创建我们的exe并释放脚本的最终用户版本。

python versioning setuptools python-pbr
1个回答
0
投票
似乎版本信息存储在package.egg-info/PKG-INFO文件中。因此,任何更新egg-info的setuptools命令都将提取git info。

PKG-INFO文件中,当前在第三行中为我显示版本:

Version: 2.0.4.0b2

直接在PKG-INFO文件中更新版本字符串确实会导致脚本在通过pkg_resourcespbr.version访问时显示更新后的字符串。

使PBR自动更新.egg-info文件夹中的元数据的最快命令是:

py setup.py egg_info

也将更新信息的更长/更复杂的命令包括buildsdistbdist等。有关更多可用的py setup.py --help-commands命令,请参阅setup.py


作者和变更日志

虽然以上内容适用于版本控制,但对于AUTHORSChangeLog命令,[br] egg_infobuild文件不会被pbr更新。

但是,这些文件是在sdistbdist命令期间生成的。因此,它看起来仍然想从Git更新所有元数据,这是完整发行版构建命令之一。

© www.soinside.com 2019 - 2024. All rights reserved.