gpt4 book ai didi

python - 将版本属性添加到 Python 模块

转载 作者:行者123 更新时间:2023-12-05 09:02:02 25 4
gpt4 key购买 nike

我正在构建一个结构如下的 Python 模块:

mypackage/
mypackage/
__init__.py
etc.py
setup.py
setup.cfg
pyproject.toml

为了构建它,我正在运行 $ python -m build。我注意到版本号不可用(例如 mypackage.__version__ 在安装后未定义),目前我只是手动设置它,如:

设置.py

setup(..., version='0.0.1' )

pyproject.toml

[project]
version = '0.0.1'

我是 Python 包开发的新手,有几篇关于此的帖子,但似乎没有一个标准的方法来做这件事。

这个包非常小,理想情况下我只想更新 __init__.py 中的一个东西,比如 __version__ = '0.0.1',然后有这个在 setup.pypyproject.toml 中自动解析。

最佳答案

你真的需要/想要一个 __version__ 属性吗?

在模块命名空间中保持一个可用的 __version__ 属性是一个流行的约定,但现在它可能已经过时了,因为 stdlib importlib.metadata不再是临时的。版本字符串最明显的地方是包元数据,在模块属性中复制相同的信息可能被认为是不必要和多余的。

当版本字符串存在于两个不同的地方时,它也给用户带来了一些难题——我们应该首先在哪里寻找它,是在包元数据中还是在模块顶级命名空间中?如果在每个地方找到的版本信息都不同,我们应该相信哪一个?

因此,只将它存储在一个地方有一些好处,而且那个地方必须是包的元数据。这是因为 Version 字段是 Core metadata specifications 中的必填 字段。 ,但是选择提供 __version__ 属性的包只是遵循约定。

获取/设置包元数据中的版本

如果您使用的是现代构建系统,那么您将直接在 pyproject.toml 中指定版本字符串,如 PEP 621 – Storing project metadata in pyproject.toml 中所述。 .问题中已经显示的方式是正确的:

[project]
name = "mypkg"
version = "0.0.1"

mypkg 的用户可以像这样检索版本:

from importlib.metadata import version
version("mypkg")

请注意,与访问 __version__ 属性不同,此版本仅从包元数据中检索,甚至不需要导入实际包。这在某些情况下很有用,例如具有导入副作用的包,例如 numpy,或者检索包版本的能力,即使它们具有不满足的依赖关系/复杂的环境设置要求。

关于python - 将版本属性添加到 Python 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72167802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com