如何列出导入的模块?

如何枚举所有导入的模块?

例如我想从这个代码得到['os','sys']

import os import sys 
 import sys sys.modules.keys() 

为当前模块获取所有导入的近似值将是检查模块的globals()

 import types def imports(): for name, val in globals().items(): if isinstance(val, types.ModuleType): yield val.__name__ 

这不会返回本地导入,也不会像from x import y那样from x import y非模块from x import y 。 请注意,这会返回val.__name__所以如果您使用import module as alias ,您将获得原始模块名称; 产量的名字,而不是如果你想别名。

findsys.modulesglobals的交集:

 import sys modulenames = set(sys.modules)&set(globals()) allmodules = [sys.modules[name] for name in modulenames] 
 print [key for key in locals().keys() if isinstance(locals()[key], type(sys)) and not key.startswith('__')] 

如果你想从脚本之外做到这一点:

 from modulefinder import ModuleFinder finder = ModuleFinder() finder.run_script("myscript.py") for name, mod in finder.modules.iteritems(): print name 

这将打印所有由myscript.py加载的模块。

这实际上是相当不错的:

 import sys mods = [m.__name__ for m in sys.modules.values() if m] 

这将创build一个可导入模块名称的列表。

此代码列出了您的模块导入的模块:

 import sys before = [str(m) for m in sys.modules] import my_module after = [str(m) for m in sys.modules] print [m for m in after if not m in before] 

如果你想知道在新的系统上安装哪些外部模块来运行你的代码,而不需要一次又一次的尝试,这应该是有用的。

它不会列出从它导入的sys模块或模块。