如何通过代码获取Python模块的版本号?

50

我想获取我使用的特定几个模块的版本号,需要将其存储在一个变量中。


5
相关:在运行时检查Python模块版本 - ire_and_curses
6个回答

97

使用 pkg_resources(setuptools的一部分)。从PyPI安装的任何东西至少都有一个版本号。不需要额外的包/模块。

>>> import pkg_resources
>>> pkg_resources.get_distribution("simplegist").version
'0.3.2'

1
pkg_resources导入非常缓慢,自Python 3.8以来推荐的方法是通过上面概述的importlib.metadata.version导入。 - rth

45

从Python 3.8开始,importlib.metadata可以用作替代pkg_resources的工具来提取通过pip等工具安装的第三方包的版本号:

from importlib.metadata import version
version('wheel')
# '0.33.4'

现在对我来说是from importlib_metadata import version - 所以是下划线而不是点。 - OnceUponATime
@OnceUponATime 我相信这是你在运行Python 3.7或更低版本时所需要的,可以参考这个答案:https://stackoverflow.com/a/54869712/169947 - undefined

41

从Matt的回答来看,执行dir(YOURMODULE),查找__version__VERSIONversion。 大多数模块使用__version__,但我认为numpy使用version.version


11
请注意,__version__是新代码的首选标准,正如PEP8所推荐的那样。请参阅将版本嵌入Python包的标准方法? - ire_and_curses
3
print(YOURMODULE.__version__) - Gabriel Fair
我如何在REPL中实现此操作,而不必进行导入? - Frak
1
似乎只对定义了 __version__ 的包有效,是吗? - Dr_Zaszuś

7

我认为这取决于模块。例如,Django有一个可以从django.VERSION获取的VERSION变量,sqlalchemy有一个可以从sqlalchemy.__version__获取的__version__变量。


Django还有django.get_version(),它返回一个字符串而不是元组。当有疑问时,可以使用dir(module) - Seth
或者您可以使用 inspect 模块 中的 getmembers 函数。 - ire_and_curses
以上对于模拟也适用。使用.get_distribution("xxx").version()没有成功。 - Sian Lerk Lau

1
一些模块(例如azure)没有提供__version__字符串。

如果使用pip安装软件包,则应该按照以下方式操作。
# say we want to look for the version of the "azure" module
import pip
for m in pip.get_installed_distributions():
    if m.project_name == 'azure':
        print(m.version)

2
我遇到了 AttributeError: module 'pip' has no attribute 'get_installed_distributions' 错误。在 Jupyter 5.0.0 和 VS Code 1.30.2 中都出现了相同的结果,使用的 pip 版本为 18.1。有什么建议吗? - Karl Baker
抱歉:看起来他们改变了pip的内部API。无论如何,这并不是受支持的用法。https://github.com/pypa/pip/issues/5154 - phzx_munki

-2
 import sys
 import matplotlib as plt
 import pandas as pd
 import sklearn as skl
 import seaborn as sns

 print(sys.version)
 print(plt.__version__)
 print(pd.__version__)
 print(skl.__version__)
 print(sns.__version__)

上面的代码显示了各个模块的版本号: 输出示例:

3.7.1rc1(v3.7.1rc1:2064bcf6ce,2018年9月26日,14:21:39)[MSC v.1914 32位(Intel)] 3.1.0 0.24.2 0.21.2 0.9.0 (sys 显示安装的 Python 版本号)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接