簡體   English   中英

存在 pyproject.toml 的 Python 項目版本的單一真實來源

[英]Single source of truth for Python project version in presence of pyproject.toml

pyproject.toml 規范提供了指定項目版本的能力,例如

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

不過,把__version__ = "0.0.1"放在foo/__init__.py ,方便用戶查詢,也是Python 常用的成語。

是否有從pyproject.toml中提取version並將其放入foo/__init__.py的標准方法?

您可以在此處采用兩種方法。

  1. 將version保存在pyproject.toml中,從源碼中的package元數據中獲取。 所以,在你的foo/__init__.py或任何地方:
from importlib.metadata import version
__version__ = version(__package__)

importlib.metadata.version自 Python 3.8 起可用。 對於較早的 Python 版本,您可以使用importlib_metadata backport 執行類似操作。

  1. 將版本保留在源代碼中並指示構建系統從那里獲取它。 對於 setuptools 構建后端,它在pyproject.toml中看起來像這樣:
[project]
dynamic = ["version"]

[tool.setuptools.dynamic]
version = {attr = "foo.__version__"}

我的建議實際上是 ()...都不是 根本不要在源代碼中保留__version__屬性。 這是一個過時的習慣,我們現在可以不用了。 Version已經是package 元數據中的必填字段,在包/模塊命名空間中保留與屬性相同的字符串是多余的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM