如何以编程方式在python中获取已安装模块的版本

时间:2011-08-16 14:24:16

标签: python

模块

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

和节目:

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

类似的东西:

# Report on the versions of programs installed
    for module in required_modules:
        try:
            print module.__version__
        except:
            exit

2 个答案:

答案 0 :(得分:3)

不幸的是module.__version__并不存在于所有模块中。

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

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

答案 1 :(得分:0)

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

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

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

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

有关详细信息,请参见documentation