How to list imported modules?
如何枚举所有导入的模块?
例如,我想从该代码中获取的['os'、'sys']
1 2 | import os import sys |
1 2 | import sys sys.modules.keys() |
仅为当前模块获取所有导入的近似值是检查
1 2 3 4 5 | import types def imports(): for name, val in globals().items(): if isinstance(val, types.ModuleType): yield val.__name__ |
这不会返回本地导入,也不会返回像
找到
1 2 3 | import sys modulenames = set(sys.modules) & set(globals()) allmodules = [sys.modules[name] for name in modulenames] |
如果要从脚本外部执行此操作:
Python 2
1 2 3 4 5 | from modulefinder import ModuleFinder finder = ModuleFinder() finder.run_script("myscript.py") for name, mod in finder.modules.iteritems(): print name |
Python 3
1 2 3 4 5 | from modulefinder import ModuleFinder finder = ModuleFinder() finder.run_script("myscript.py") for name, mod in finder.modules.items(): print(name) |
这将打印myscript.py加载的所有模块。
1 2 | print [key for key in locals().keys() if isinstance(locals()[key], type(sys)) and not key.startswith('__')] |
假设您已经导入了数学,并重新:
1 | >>import math,re |
现在来看同样的用法
1 | >>print(dir()) |
如果在导入之前和导入之后运行它,就可以看到不同之处。
它实际上非常适合:
1 2 | import sys mods = [m.__name__ for m in sys.modules.values() if m] |
这将创建一个具有可导入模块名称的列表。
此代码列出模块导入的模块:
1 2 3 4 5 | 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] |
如果您想知道在新系统上安装哪些外部模块来运行代码,而不需要一次又一次地尝试,那么它应该很有用。
它不会列出从中导入的
从@lila窃取(由于没有格式化,无法发表评论),这也显示了模块的/path/:
1 2 3 4 5 6 7 8 | #!/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() |
产生:
1 2 3 4 5 6 7 8 | 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 ... |
…适合大胸或其他有你的。被警告了,太长了!
我喜欢在这种情况下使用列表理解:
1 2 3 4 5 6 7 8 9 10 11 | >>> [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) |