使用由git repo标记生成的版本
pbr
我在从我的包中获取版本信息时遇到问题,该包被设置为使用
setuptools
与
pbr公司
分机。
pbr公司
将从git repo中的标记中提取版本信息,因此只有一个真相来源。
我做了一些基本的工作-
see this Q&A for more info
.
它
是
总的来说,如果我把包裹分发得很好的话。例如:
py setup.py sdist
将创建一个完整的发行版,更新git的版本标记和其他元数据。
但我不需要这个包的完整发行版,我的团队只是在git repo的本地工作。我也在用
pyinstaller
为用户分发创建主脚本的可执行文件(不需要Python)。因此,我想要一个简单、快速的命令,它将根据git repo的最新更新来更新元数据,而不需要花费额外的时间让SetupTools构建和创建完整的分发包,因为它无论如何都不会被使用。
pbr公司
将从repo中提取版本(来自标记)、作者和变更日志信息,因此这是一个大的时间节省器,允许我们将大部分元数据直接保存在git中。
问题
我们可以做些什么来更新包元数据吗
pbr公司
,而不是完全分发?
尤其是在版本上:
-
命令何时使用
setup.py
使用
pbr公司
扩展实际上是从git repo更新版本,以便任何查询版本的命令都能得到更新的版本?
-
此设置中实际存储的版本在哪里?(我找不到……)
更多信息和一些代码
我有一个很短的
安装程序.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))
# 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')
以上全部返回
古老的
版本字符串(上次进行完全分发时)。
那么,我还有什么可以做的吗
py设置.py sdist
或者类似的完整发行版构建命令(bdist,bdist_egg,等等)来简单地更新我的包信息,以便在运行主包脚本时,上面的方法会给我最新版本的字符串和其他git元数据?
这将允许我们在签出新的提交后作为开发人员在本地更新包,然后运行
pyinstaller安装程序
创建我们的exe并发布我们的最终用户版本的脚本。