打印模块的版本而不导入整个包

Posted

技术标签:

【中文标题】打印模块的版本而不导入整个包【英文标题】:Print version of a module without importing the entire package 【发布时间】:2018-01-13 19:01:46 【问题描述】:

如果只导入一个模块,是否可以检查包的版本?

当一个包被导入时...

import pandas as pd

我用:

print('pandas : version '.format(pd.__version__))

打印版本号。

如果只导入一个模块,我如何检查版本号,例如

import matplotlib.pyplot as plt

from sklearn.metrics import confusion_matrix

有什么建议吗?

【问题讨论】:

【参考方案1】:

我通常这样做:

import matplotlib.pyplot as plt
import sys

print (sys.modules[plt.__package__].__version__)

如果你只导入一个函数:

from sklearn.metrics import confusion_matrix as function
import sys

try:module_name = function.__module__[:function.__module__.index(".")]
except:module_name = function.__module__

print (sys.modules[module_name].__version__)

如果这不起作用,您可以导入 pip 并 for 循环所有模块。

【讨论】:

谢谢!以及当我使用“from sklearn.metrics import chaos_matrix”时如何检查sklearn的版本号。 请注意,这个答案相当于直接导入***包:简单的import matplotlib; print(matplotlib.__version__)在语义上是等价的,同时更具可读性。我看到这篇文章回答了如何在仅导入子包时派生包版本。但是标题中的问题表明可以以某种方式避免额外的开销,但事实并非如此。 (我怀疑我的推理,比较dir(sys.module["matplotlib"])import matplotlib; dir(matplotlib),它们是相同的)

以上是关于打印模块的版本而不导入整个包的主要内容,如果未能解决你的问题,请参考以下文章