pbr
从git repo标签生成的版本我在从软件包中获取版本信息时遇到了问题,该软件包使用扩展名为setuptools
的{{1}}设置为普通的Python软件包。 pbr
将从git repo中的标签中提取版本信息,因此只有一个事实来源。
我确实掌握了基础知识-see this Q&A for more info。
如果我完整分发软件包,它总体上可以正常工作。例如:pbr
将创建完整发行版,并且git中的version标签和其他元数据将被更新。
但是我不需要此软件包的完整发行版,我的团队只是从git repo本地进行开发。我还使用py setup.py sdist
创建主脚本的可执行文件以供用户分发(不需要Python)。因此,我想要一个简单,快速的命令,该命令将根据git repo的最新更新来更新元数据,而无需花费额外的时间来让SetupTools生成和创建完整的分发程序包,而该程序包将永远不会使用。
pyinstaller
将从存储库中提取版本(从标签),作者和变更日志信息,因此节省了很多时间,使我们可以将大多数元数据直接保留在git中。
我们是否可以做任何事情来获取包元数据以pbr
更新,而无需进行完整分发?
特别是版本:
pbr
扩展名的setup.py
何时或与哪个命令一起实际从git repo更新版本,以便查询该版本的任何命令都将获取更新的版本?我有一个简短的pbr
,可与setup.py
扩展名一起使用:
pbr
现在,如果我使用标签更新git repo中的最新提交,则命令#!/usr/bin/env python
from setuptools import setup
setup(
setup_requires=['pbr', 'setuptools'],
pbr=True,
)
将基于该标签返回新的更新版本,但是我可以找到的任何其他直接方法仍会返回旧的版本字符串。因此,该命令似乎不会在任何地方存储新版本字符串。
以下是我从软件包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))
# Update per sinoroc's comment:
# As of Python 3.8, you can use this from the stdlib,
# which removes run-time dependencies on `pbr` or `setuptools`
import importlib.metadata
__version__ = importlib.metadata.version('Example')
还是类似的完整发行版构建命令(bdist,bdist_egg等)之外,我能做些什么来简单地更新我的软件包信息,以便上述方法为我提供最新的信息。主程序包脚本运行时版本字符串和其他git元数据?
这将使我们能够在签出新提交后以开发人员身份在本地更新软件包,然后运行py setup.py sdist
创建我们的exe并释放脚本的最终用户版本。
答案 0 :(得分:1)
似乎版本信息存储在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
命令的pbr不会更新egg_info
和build
文件。
但是,这些文件是在sdist
和bdist
命令期间生成的(我认为包括bdist
的所有版本)。因此,看起来仍然需要从Git更新所有元数据,这是完整发行版构建命令之一。
将不生成命令和ChangeLog文件的命令:
py setup.py egg_info
py setup.py build
py setup.py develop
(注意:我使用最近的py
命令来运行python,该命令可让您设置运行python的默认环境,但您可能需要使用python
或{{ 1}}代替)