首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Setuptools和PBR更新Python包中的git元数据

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

Stack Overflow用户
提问于 2019-10-24 22:13:48
回答 1查看 625关注 0票数 0

使用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?

  • Where扩展的setup.py何时或使用哪些命令从git中实际更新版本,以便查询版本的任何命令都将得到更新的setup.py是实际存储在此设置中的版本吗?(我找不到.)

更多信息和一些代码

我有一个非常短的setup.py,可以与pbr扩展一起使用:

代码语言:javascript
运行
复制
#!/usr/bin/env python

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

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

下面是我在包__init__.py中尝试过的几种方法

代码语言:javascript
运行
复制
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并发布脚本的最终用户版本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-24 22:27:12

版本的信息似乎存储在package.egg-info/PKG-INFO文件中。因此,任何更新鸡蛋信息的setuptools命令都会引入git信息。

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

代码语言:javascript
运行
复制
Version: 2.0.4.0b2

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

让PBR自动更新. appears文件夹中的元数据的最快命令似乎是:

代码语言:javascript
运行
复制
py setup.py egg_info

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

作者和变更人数g

虽然上述版本控制是正确的,但对于AUTHORSbuild命令,pbr不会更新egg_infobuild文件。

但是,这些文件是在sdistbdist命令期间生成的(我认为包括bdist的所有版本)。因此,看起来仍然需要更新Git中的所有元数据,这需要一个完整的发行版构建命令。

而不是生成作者和ChangeLog文件的命令:

代码语言:javascript
运行
复制
py setup.py egg_info
py setup.py build
py setup.py develop

(注意:我使用了最近的py命令来运行python,它允许您设置运行python的默认环境,但是您可能需要使用pythonpython3 )

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58549784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档