導入模塊和檢查 Python 版本
import subprocess
import sys
if sys.version_info[:2] >= (3, 8):
from importlib.metadata import PackageNotFoundError, version
else:
from importlib_metadata import PackageNotFoundError, version
這部分代碼首先導入了 subprocess 和 sys 模塊。subprocess 用于執(zhí)行外部進程,而 sys 提供了訪問與 Python 解釋器緊密相關的變量和函數(shù)的接口。
接下來,它檢查 Python 的版本。如果版本是 3.8 或更高,它將從 importlib.metadata 導入 PackageNotFoundError 和 version。如果是低于 3.8 的版本,它將從 importlib_metadata(一個第三方包)導入相同的類。這是為了保證代碼在不同版本的 Python 中都能正常工作。
獲取包版本
try:
dist_name = __name__
__version__ = version(dist_name)
except PackageNotFoundError:
__version__ = "unknown"
finally:
del version, PackageNotFoundError
這段代碼嘗試獲取當前包的版本號。它通過 version(dist_name) 函數(shù)調(diào)用,其中 dist_name 通常是包的名稱。
如果無法找到包(即 PackageNotFoundError 被觸發(fā)),則將 version 設置為 "unknown"。
最后,它刪除了 version 和 PackageNotFoundError 以清理命名空間。
從同一包中導入模塊
總結
這個 init.py 文件為整個包設置了基礎,確保了代碼的兼容性,定義了包的版本,同時使包中的主要類和函數(shù)可以被外部輕松訪問。這是構建 Python 包時的常見做法,旨在提高代碼的模塊化和易用性。