如何枚举所有导入的模块?
例如,我想从下面的代码中获取['os', 'sys']:
import os
import sys
如何枚举所有导入的模块?
例如,我想从下面的代码中获取['os', 'sys']:
import os
import sys
当前回答
这段代码列出了你的模块导入的模块:
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模块或其他模块。
其他回答
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('__')]
找到sys的交点。带全局变量的模块:
import sys
modulenames = set(sys.modules) & set(globals())
allmodules = [sys.modules[name] for name in modulenames]
在这种情况下,我喜欢使用列表理解:
>>> [w for w in dir() if w == 'datetime' or w == 'sqlite3']
['datetime', 'sqlite3']
# To count modules of interest...
>>> count = [w for w in dir() if w == 'datetime' or w == 'sqlite3']
>>> len(count)
2
# To count all installed modules...
>>> count = dir()
>>> len(count)
它实际上工作得很好:
import sys
mods = [m.__name__ for m in sys.modules.values() if m]
这将创建一个包含可导入模块名称的列表。