如何枚举所有导入的模块?
例如,我想从这段代码中获取['os','sys']
import os
import sys
Run Code Online (Sandbox Code Playgroud)
Gle*_*ard 163
import sys
sys.modules.keys()
Run Code Online (Sandbox Code Playgroud)
获取当前模块的所有导入的近似值是检查globals()
模块:
import types
def imports():
for name, val in globals().items():
if isinstance(val, types.ModuleType):
yield val.__name__
Run Code Online (Sandbox Code Playgroud)
这不会返回本地导入,也不会返回非模块导入from x import y
.请注意,这将返回,val.__name__
以便您使用时获得原始模块名称import module as alias
; 如果你想要别名,请改为产生名称.
Mar*_*cin 32
找到的路口sys.modules
有globals
:
import sys
modulenames = set(sys.modules) & set(globals())
allmodules = [sys.modules[name] for name in modulenames]
Run Code Online (Sandbox Code Playgroud)
Lil*_*ila 25
如果您想从脚本外部执行此操作:
from modulefinder import ModuleFinder
finder = ModuleFinder()
finder.run_script("myscript.py")
for name, mod in finder.modules.iteritems():
print name
Run Code Online (Sandbox Code Playgroud)
这将打印myscript.py加载的所有模块.
Mik*_*iak 12
print [key for key in locals().keys()
if isinstance(locals()[key], type(sys)) and not key.startswith('__')]
Run Code Online (Sandbox Code Playgroud)
让说你进口的数学和重:
>>import math,re
Run Code Online (Sandbox Code Playgroud)
现在看到相同的用途
>>print(dir())
Run Code Online (Sandbox Code Playgroud)
如果在导入之前和导入之后运行它,则可以看到其中的区别。
小智 6
它实际上非常适合:
import sys
mods = [m.__name__ for m in sys.modules.values() if m]
Run Code Online (Sandbox Code Playgroud)
这将创建一个包含可导入模块名称的列表.
此代码列出了您的模块导入的模块:
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]
Run Code Online (Sandbox Code Playgroud)
如果您想知道在新系统上安装哪些外部模块来运行您的代码,而不需要一次又一次地尝试,它应该很有用。
它不会列出sys
从中导入的模块。