You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使用importlib.metadata获取当前所属安装包的自身版本号?

需求完全可实现,核心是自动获取当前代码所属包的标识,不需要提前定义__version__变量

方案1:用__package__内置变量获取包名(最简单通用)

Python的每个模块都内置了__package__变量,会直接返回当前模块所属包的名称。如果你的代码写在包的顶层模块里,直接用即可:

from importlib.metadata import version

self_version = version(__package__)

如果代码写在子模块中(比如你的包叫myapp,代码放在myapp.utils模块里),只需要拆分取顶层包名即可适配:

from importlib.metadata import version

top_package = __package__.split(".")[0]
self_version = version(top_package)

方案2:通过模块路径反向查找发行包(适配分发名与导入名不一致的场景)

如果你的项目存在PyPI分发名称和导入包名不一致的情况(比如分发名是pyyaml,导入名是yaml),可以通过当前模块的文件路径反向匹配对应的发行包,完全不需要依赖包名匹配:

from importlib.metadata import distribution
from pathlib import Path

# 取当前模块的绝对路径,查询对应的发行包元数据
current_file = Path(__file__).resolve()
dist = distribution(path=str(current_file))
self_version = dist.version

注意事项

  • 两种方案都仅在包已经被正确安装到当前运行环境(包括pip的可编辑安装模式)时生效,直接运行本地未安装的脚本会报错,完全符合你提到的wheel包安装后使用的场景。
  • 如果需要兼容Python 3.8以前的版本,可以安装第三方兼容包importlib-metadata,将导入语句替换为from importlib_metadata import version, distribution即可。

内容的提问来源于stack exchange,提问作者Thurse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:45:04