如何在 python 中打印 'user imported' 模块名称和版本

how to print 'user imported' module name and version in python

我想在 colab 中打印导入的模块名称和版本
这是我的代码

import numpy as np
....and so on....

ref_dict = {'pd': 'pandas', 'np': 'numpy', 'sns': 'seaborn', 'plt': 'matplotlib'}
as_name =[x for x in set(sys.modules) & set(globals())]
as_ref = [ref_dict[x] for x in dir() if x in ref_dict.keys()]
module_list= as_name + as_ref
a, na=[], []

print('--module name & versions imported by user--\n')
for name in module_list:
    try: a.append('{}: {}'.format(name, sys.modules[name].__version__))
    except: na.append('{}: {}'.format(name, 'Not available'))

print(*a,'\n-----\n', *na, sep='\n')

这是结果

--module name & versions imported by user--

torch: 1.8.0+cu101
re: 2.2.1
tqdm: 4.41.1
sklearn: 0.22.2.post1
numpy: 1.19.5
pandas: 1.1.5
matplotlib: 3.2.2
seaborn: 0.11.1

-----

os: Not available
sys: Not available
__main__: Not available

如上所示,ref_dict 指定通过别名导入的模块,我不想这样做。
有没有更好的方法来查看导入的模块版本和名称?

这为您提供了所有导入模块的列表

{value.__name__ for value in globals().values() if inspect.ismodule(value)}

所以它与您使用的类似,但不是在 global() 中使用别名,而是获取模块的实际名称。

请注意,它需要您导入 inspect,因此 inspectbuiltins 也是列表的一部分

In [1]: import inspect

In [2]: import pandas as pd

In [3]: {value.__name__ for value in globals().values() if inspect.ismodule(value)}
Out[3]: {'builtins', 'inspect', 'pandas'}