使用pbr从git标记生成的版本
我在从包中获取版本信息时遇到了问题,该包是使用带有setuptools扩展的pbr作为普通的Python包设置的。pbr将从git中的标签中提取版本信息,因此只有一个真实来源。
我确实得到了基本的工作- see this Q&A for more info。
如果我能充分分发这个包的话,它总体上是可行的。例如:py setup.py sdist将创建一个完整的发行版,版本标记和来自git的其他元数据将被更新。
但是我不需要这个包的全部发行版,我的团队只是在git的基础上在本地工作。我还使用pyinstaller为用户发行版创建主脚本的可执行文件(而不需要Python)。因此,我需要一个简单、快速的命令,它将根据最新更新到git的元数据来更新元数据,而不需要花费额外的时间让SetupTools构建和创建完整的分发包,无论如何也不会使用它。
pbr将从回购中提取版本(从标签)、作者和更改信息,因此这是一个很大的时间保护程序,允许我们将大部分元数据直接保存在git中。
问题
我们可以做些什么来让包元数据使用pbr更新,而不需要发布完整的版本呢?
特别是在版本方面:
使用version?
setup.py何时或使用哪些命令从git中实际更新版本,以便查询版本的任何命令都将得到更新的setup.py是实际存储在此设置中的版本吗?(我找不到.)更多信息和一些代码
我有一个非常短的setup.py,可以与pbr扩展一起使用:
#!/usr/bin/env python
from setuptools import setup
setup(
setup_requires=['pbr', 'setuptools'],
pbr=True,
)现在,如果我用标记更新git中的最新提交,命令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 setup.py sdist或类似的完整发行版构建命令(bdist、bdist_egg等)之外,还有什么我可以做的吗?为了简单地更新我的包信息,所以当主包脚本运行时,上面的方法会给我最新的版本字符串和其他git元数据。
这将允许我们在签出新提交后,作为开发人员在本地更新包,然后运行pyinstaller来创建我们的exe并发布脚本的最终用户版本。
发布于 2019-10-24 22:27:12
版本的信息似乎存储在package.egg-info/PKG-INFO文件中。因此,任何更新鸡蛋信息的setuptools命令都会引入git信息。
在PKG-INFO文件中,当前在第3行中为我显示了该版本:
Version: 2.0.4.0b2在PKG-INFO文件中直接更新版本字符串确实会导致脚本在通过pkg_resources或pbr.version访问时显示更新的字符串。
让PBR自动更新. appears文件夹中的元数据的最快命令似乎是:
py setup.py egg_info也将更新信息的更长/更复杂的命令包括build、sdist、bdist等。更多可用的setup.py命令请参见py setup.py --help-commands。
作者和变更人数g
虽然上述版本控制是正确的,但对于AUTHORS或build命令,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或python3 )
https://stackoverflow.com/questions/58549784
复制相似问题