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

例如,我想从下面的代码中获取['os', 'sys']:

import os
import sys

当前回答

print [key for key in locals().keys()
       if isinstance(locals()[key], type(sys)) and not key.startswith('__')]

其他回答

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这样的非模块导入。请注意,它返回val.__name__,因此如果你使用import module作为别名,你会得到原始的模块名;如果需要别名,则生成名称。

print [key for key in locals().keys()
       if isinstance(locals()[key], type(sys)) and not key.startswith('__')]

假设你已经导入了math和re:

>>import math,re

现在来看看同样的用法

>>print(dir())

如果在导入之前和导入之后运行它,可以看到区别。

找到sys的交点。带全局变量的模块:

import sys
modulenames = set(sys.modules) & set(globals())
allmodules = [sys.modules[name] for name in modulenames]

这段代码列出了你的模块导入的模块:

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模块或其他模块。