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

pip show与importlib.metadata.version获取版本不一致的原因排查

问题原因分析

核心差异出在importlib.metadata的查找逻辑和本地模块的安装状态上:

  • importlib.metadata.version("mymodule")会遍历Python的site-packages目录,查找所有已安装的mymodule元数据文件(比如.dist-info或.egg-info文件夹),返回它找到的第一个匹配的版本——通常是之前安装过的旧版本(可能是目录排序优先或安装时间晚的旧版本),而非当前开发的本地版本。
  • pip show mymodule是直接查询pip的包管理数据库,返回的是pip最后一次成功安装的版本,也就是你本地安装的正确版本。

具体原因拆解:

  • 你之前通过pip install安装过旧版本的mymodule,这些旧版本的元数据文件夹还残留在site-packages中。importlib.metadata只会读取已安装包的元数据,不会主动识别你开发目录里的pyproject.toml。
  • 如果你直接运行开发目录下的代码但未使用可编辑安装(pip install -e .),Python会优先导入开发目录的模块,但importlib.metadata依然会去site-packages找元数据,自然拿到旧版本。

解决建议:

  • 先彻底卸载所有旧版本:pip uninstall -y mymodule,再执行pip install -e .进行可编辑安装,这样importlib.metadata就能正确读取开发版本的元数据。
  • 也可以直接在__init__.py中硬编码版本号,同时用setuptools-scm这类工具自动同步pyproject.toml和__init__.py的版本,避免手动维护出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:25:49