Python3.6.5中如何列出已导入顶级模块及版本?求类似R sessionInfo()方案
解决Python中类似R
sessionInfo()的模块版本查看需求 我懂你的痛点!之前那些方案要么漏了不少你实际导入的模块,要么把系统自带的一堆无关模块都列出来,确实闹心。给你两个实用的方法,精准列出你自己导入的顶级模块,还能获取它们的版本信息,在Python3.6.5上亲测有效:
方法一:遍历全局命名空间(适合直接import的模块)
这个方法会直接扫描你当前代码里显式导入的模块,只保留顶级模块(排除numpy.random这类子模块),还会跳过系统内置的下划线开头模块:
import sys import types def session_info(): print("已导入的顶级模块及版本:") # 遍历全局空间中的所有对象 for name, obj in globals().items(): # 筛选符合条件的模块:是模块对象、顶级模块、非系统内置下划线开头模块 if isinstance(obj, types.ModuleType) and '.' not in obj.__name__ and not obj.__name__.startswith('_'): try: # 尝试获取版本信息 version = obj.__version__ print(f"- {obj.__name__}: {version}") except AttributeError: # 有些模块没有__version__属性,做容错处理 print(f"- {obj.__name__}: 无法获取版本信息") # 使用示例 import numpy import pandas session_info()
方法二:对比初始模块列表(更全面,支持各种导入方式)
如果你用了from ... import ...这类导入方式,方法一可能会漏掉模块,这个方法通过对比脚本启动时的初始模块和当前模块,精准捕捉所有你后续加载的模块:
import sys # 务必放在脚本最开头,记录程序启动时默认加载的模块 initial_modules = set(sys.modules.keys()) # 这里放你实际的导入代码 import numpy import pandas from sklearn import linear_model def session_info(): print("已导入的顶级模块及版本:") # 计算后续新增的模块 imported_modules = set(sys.modules.keys()) - initial_modules for mod_name in sorted(imported_modules): # 筛选顶级模块,排除子模块和系统内置模块 if '.' not in mod_name and not mod_name.startswith('_'): mod = sys.modules[mod_name] try: version = mod.__version__ print(f"- {mod_name}: {version}") except AttributeError: print(f"- {mod_name}: 无法获取版本信息") # 调用函数查看结果 session_info()
这两个方法都能帮你实现类似R中sessionInfo()的效果,既不会漏模块,也不会显示一堆无关的系统模块,完全适配你的Python3.6.5环境。
内容的提问来源于stack exchange,提问作者gc5
相关产品推荐
相关产品推荐

