如何枚举所有导入的模块?
例如,我想从下面的代码中获取['os', 'sys']:
import os
import sys
如何枚举所有导入的模块?
例如,我想从下面的代码中获取['os', 'sys']:
import os
import sys
当前回答
print [key for key in locals().keys()
if isinstance(locals()[key], type(sys)) and not key.startswith('__')]
其他回答
在这种情况下,我喜欢使用列表理解:
>>> [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)
假设你已经导入了math和re:
>>import math,re
现在来看看同样的用法
>>print(dir())
如果在导入之前和导入之后运行它,可以看到区别。
这段代码列出了你的模块导入的模块:
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模块或其他模块。
如果你想在脚本之外做这个:
Python 2
from modulefinder import ModuleFinder
finder = ModuleFinder()
finder.run_script("myscript.py")
for name, mod in finder.modules.iteritems():
print name
Python 3
from modulefinder import ModuleFinder
finder = ModuleFinder()
finder.run_script("myscript.py")
for name, mod in finder.modules.items():
print(name)
这将打印myscript.py加载的所有模块。
从@Lila(由于没有格式,无法发表评论)中窃取,这也显示了模块的/路径/:
#!/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之类的。注意,它很长!