【问题标题】:How to have the python program version only in setup.cfg for runtime and packaging?如何仅在 setup.cfg 中拥有 python 程序版本以进行运行时和打包?
【发布时间】:2022-02-07 12:51:08
【问题描述】:

我正在寻找一种方法来专门在 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 =============

我怎样才能做到这一点?

【问题讨论】:

    标签: python versioning packaging


    【解决方案1】:

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

    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')  
    

    【讨论】:

    • 谢谢,有一个简单的解决方案总是很高兴。对我来说,它们各有优缺点 - 为什么你更喜欢第一个?
    • 更多版本兼容性,无需额外导入。
    • 好的,感谢您的回复。两者都测试过,都有效。我尊重您的意见并选择了选项 2,因为它将版本号与代码本身分开 - 不过,这只是我的偏好问题。
    猜你喜欢
    • 2021-12-12
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 2013-06-11
    • 2023-02-10
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多