如何让 python 的程序版本只在 setup.cfg 运行和打包?

How to have the python program version only in setup.cfg for runtime and packaging?

我正在寻找一种方法来专门在 setup.cfg 中指定我的 python 程序版本(不是解释器)并在运行时在我的 python 程序中使用它 - 它似乎是仅使用 setup.cfg 并完全省略 setup.py 的现代方式,如此处记录:https://setuptools.pypa.io/en/latest/userguide/declarative_config.html

这个话题似乎涉及了多年的冗长讨论,没有明确的答案,如下所述:Standard way to embed version into Python package?

我想要实现的是我的 setup.cfg 具有版本号(以及所有其他相关包数据)并使该版本在运行时可供我的程序使用。

示例setup.cfg

[metadata]
name = my_app
version = 0.1.3
author = foo
...

然后在我的运行时访问该版本号:

2022-02-04T23:01:28.177 INFO root::============= Welcome to my_app version 0.1.3, PID: 52296 =============

我怎样才能做到这一点?

我能想到的两个选项 – 我会选择第一个。

1。使用 setup.cfgattr: 支持从源中读取版本

setup.cfg

[metadata]
version = attr:my_app.__version__

my_app/init.py

# ...
__version__ = '0.1.3'

2。使用importlib.metadata从安装元数据中读取版本

(Python 3.8 中的新增功能,具有旧版 Python 的向后移植)

from importlib.metadata import version

my_version = version('my_app')