有没有办法检查源代码(或编译的代码对象)并告诉Python 3.3中导入了哪些模块?
例如,在:
import foo
def func():
from bar import *
return 42
我希望能够告诉我们正在导入模块foo和bar。我希望避免使用正则表达式或模式匹配。
答案 0 :(得分:6)
您可以使用ast
module分析代码。
import ast
class ImportNodeVisitor(ast.NodeVisitor):
def visit_Import(self, node):
print(ast.dump(node))
self.generic_visit(node)
def visit_ImportFrom(self, node):
print(ast.dump(node))
self.generic_visit(node)
with open(sourcefilename) as sf:
tree = ast.parse(sf.read(), sourcefilename)
ImportNodeVisitor().visit(tree)
产生
Import(names=[alias(name='foo', asname=None)])
ImportFrom(module='bar', names=[alias(name='*', asname=None)], level=0)