如何通过代码获取 python 模块的版本号? [复制]
Posted
技术标签:
【中文标题】如何通过代码获取 python 模块的版本号? [复制]【英文标题】:How do I get a python module's version number through code? [duplicate] 【发布时间】:2011-04-01 06:01:05 【问题描述】:我正在尝试获取我使用的几个特定模块的版本号。我可以存储在变量中的东西。
【问题讨论】:
相关:Checking Python module version at runtime 【参考方案1】:使用pkg_resources(setuptools 的一部分)。从PyPI 安装的任何东西都至少有一个版本号。不需要额外的包/模块。
>>> import pkg_resources
>>> pkg_resources.get_distribution("simplegist").version
'0.3.2'
【讨论】:
【参考方案2】:来自 Matt 的通用答案,执行 dir(YOURMODULE)
并查找 __version__
、VERSION
或 version
。大多数模块都喜欢__version__
,但我认为numpy
使用version.version
【讨论】:
请注意__version__
是新代码的首选标准,正如PEP8 所推荐的那样。见Standard way to embed version into Python package?
print(YOURMODULE.__version__)
如何从 REPL 执行此操作而不实际执行导入?
它似乎只适用于定义__version__
的包,不是吗?【参考方案3】:
以Python 3.8
开头,importlib.metadata
可以替代pkg_resources
提取通过pip
等工具安装的第三方包的版本:
from importlib.metadata import version
version('wheel')
# '0.33.4'
【讨论】:
【参考方案4】:我认为这取决于模块。例如,Django 有一个 VERSION 变量,你可以从 django.VERSION
获取,sqlalchemy 有一个 __version__
变量,你可以从 sqlalchemy.__version__
获取。
【讨论】:
django 也有django.get_version()
,它返回一个字符串而不是一个元组。如有疑问,dir(module)
.
或者你可以使用inspect module中的getmembers
函数。
以上也适用于模拟。 .get_distribution("xxx").version() 没有运气【参考方案5】:
某些模块(例如 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)
【讨论】:
我收到了AttributeError: module 'pip' has no attribute 'get_installed_distributions'
。使用 pip 版本 18.1 在 Jupyter 5.0.0 和 VS Code 1.30.2 中的结果相同。有什么建议吗?
对不起:看起来他们改变了 pip 的内部 API。无论如何,这不是受支持的用途。 github.com/pypa/pip/issues/5154【参考方案6】:
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__)
上面的代码显示了各个模块的版本: 样品 O/P:
3.7.1rc1(v3.7.1rc1:2064bcf6ce,2018 年 9 月 26 日,14:21:39)[MSC v.1914 32 位(英特尔)] 3.1.0 0.24.2 0.21.2 0.9.0 (sys显示python的版本)
【讨论】:
以上是关于如何通过代码获取 python 模块的版本号? [复制]的主要内容,如果未能解决你的问题,请参考以下文章