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

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

import os
import sys

当前回答

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

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

其他回答

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

>>import math,re

现在来看看同样的用法

>>print(dir())

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

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

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

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

它实际上工作得很好:

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

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

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作为别名,你会得到原始的模块名;如果需要别名,则生成名称。