pbr
从git repo标签生成的版本我在从软件包中获取版本信息时遇到问题,该软件包使用扩展名为setuptools
的pbr
设置为普通的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
更新,而无需进行完整分发吗?
特别是版本:
setup.py
扩展名的pbr
实际使用哪个命令或使用哪个命令从git repo更新版本,以便查询该版本的任何命令都将获取更新的版本?我有一个很短的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并释放脚本的最终用户版本。
package.egg-info/PKG-INFO
文件中。因此,任何更新egg-info的setuptools
命令都将提取git info。在PKG-INFO
文件中,当前在第三行中为我显示版本:
Version: 2.0.4.0b2
直接在PKG-INFO文件中更新版本字符串确实会导致脚本在通过pkg_resources
或pbr.version
访问时显示更新后的字符串。使PBR自动更新.egg-info文件夹中的元数据的最快命令是:
py setup.py egg_info
也将更新信息的更长/更复杂的命令包括build
,sdist
,bdist
等。有关更多可用的py setup.py --help-commands
命令,请参阅setup.py
。
作者和变更日志虽然以上内容适用于版本控制,但对于
AUTHORS
或ChangeLog
命令,[br]egg_info
和build
文件不会被pbr更新。但是,这些文件是在
sdist
和bdist
命令期间生成的。因此,它看起来仍然想从Git更新所有元数据,这是完整发行版构建命令之一。