【问题标题】:How do I get the version of an installed module in Python programmatically?如何以编程方式在 python 中获取已安装模块的版本
【发布时间】:2025-12-30 10:15:15
【问题描述】:

对于模块:

required_modules = ['nose', 'coverage', 'webunit', 'MySQLdb', 'pgdb', 'memcache']

和程序:

required_programs = ['psql', 'mysql', 'gpsd', 'sox', 'memcached']

类似:

# 报告已安装程序的版本 对于 required_modules 中的模块: 尝试: 打印模块.__version__ 除了: 出口

【问题讨论】:

标签: python


【解决方案1】:

很遗憾,module.__version__ 并非出现在所有模块中。

一种解决方法是使用包管理器。当您使用 easy_install 或 pip 安装库时,它会记录已安装的版本。然后你可以这样做:

import pkg_resources
version = pkg_resources.get_distribution("nose").version

【讨论】:

  • 谢谢@moraes 这正是我所需要的
  • 不知何故 MySQLdb 在命令行上无法使用 .__version__ 我可以导入和使用 MySQLdb.__version__ 但是当我在脚本中使用相同的语法时它不会给我版本号
【解决方案2】:

我发现使用各种可用的工具非常不可靠(包括moraes' answer 提到的最好的pkg_resources),因为它们中的大多数并不涵盖所有情况。例如

  • 内置模块
  • 模块未安装,只是添加到 python 路径(例如通过您的 IDE)
  • 同一模块的两个版本可用(python 路径中的一个取代已安装的一个)

由于我们需要一种可靠的方法来获取任何包、模块或子模块的版本,我最终写了getversion。使用起来非常简单:

from getversion import get_module_version
import foo
version, details = get_module_version(foo)

详情请参阅documentation

【讨论】:

    最近更新 更多