如何枚举所有导入的模块?
E.g。我想从这段代码中获取['os','sys']
import os
import sys
答案 0 :(得分:146)
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 as alias
,则会获得原始模块名称;如果你想要别名,请改为产生名称。
答案 1 :(得分:32)
找到sys.modules
与globals
:
import sys
modulenames = set(sys.modules) & set(globals())
allmodules = [sys.modules[name] for name in modulenames]
答案 2 :(得分:23)
如果您想从剧本外部执行此操作:
Python 2
foreach (var file in files) {
...
var request = new Amazon.CloudSearchDomain.Model.UploadDocumentsRequest() {...}
var response = await client.UploadDocumentsAsync(request);
};
Python 3
from modulefinder import ModuleFinder
finder = ModuleFinder()
finder.run_script("myscript.py")
for name, mod in finder.modules.iteritems():
print name
这将打印myscript.py加载的所有模块。
答案 3 :(得分:12)
print [key for key in locals().keys()
if isinstance(locals()[key], type(sys)) and not key.startswith('__')]
答案 4 :(得分:5)
它实际上非常适合:
import sys
mods = [m.__name__ for m in sys.modules.values() if m]
这将创建一个包含可导入模块名称的列表。
答案 5 :(得分:5)
假设您已导入数学并且重新:
>>import math,re
现在看到相同的用途
>>print(dir())
如果您在导入之前和导入之后运行它,可以看到差异。
答案 6 :(得分:3)
此代码列出了您的模块导入的模块:
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
模块。
答案 7 :(得分:1)
从@Lila隐匿(由于未格式化,因此无法发表评论),这也显示了模块的/ path /:
#!/usr/bin/env python
import sys
from modulefinder import ModuleFinder
finder = ModuleFinder()
# Pass the name of the python file of interest
finder.run_script(sys.argv[1])
# This is what's different from @Lila's script
finder.report()
产生:
Name File
---- ----
...
m token /opt/rh/rh-python35/root/usr/lib64/python3.5/token.py
m tokenize /opt/rh/rh-python35/root/usr/lib64/python3.5/tokenize.py
m traceback /opt/rh/rh-python35/root/usr/lib64/python3.5/traceback.py
...
..适用于grepping或您拥有什么。警告,它很长!
答案 8 :(得分:0)
在这种情况下,我喜欢使用列表理解:
>>> [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)