有没有办法检查源代码(或编译的代码对象)并告诉在Python 3.3中导入哪些模块?
例如,在:
import foo
def func():
from bar import *
return 42
Run Code Online (Sandbox Code Playgroud)
我想能够告诉模块foo和bar正在导入.我希望避免使用正则表达式或模式匹配.
您可以使用该ast模块分析代码.
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)
Run Code Online (Sandbox Code Playgroud)
产生
Import(names=[alias(name='foo', asname=None)])
ImportFrom(module='bar', names=[alias(name='*', asname=None)], level=0)
Run Code Online (Sandbox Code Playgroud)