Python 如何判断哪些模块已导入某些源代码?
有没有办法检查源代码(或编译后的代码对象)并告诉Python 3.3中导入了哪些模块 例如,在:Python 如何判断哪些模块已导入某些源代码?,python,python-3.x,Python,Python 3.x,有没有办法检查源代码(或编译后的代码对象)并告诉Python 3.3中导入了哪些模块 例如,在: import foo def func(): from bar import * return 42 我想知道模块foo和bar正在被导入。我希望避免正则表达式或模式匹配。您可以使用来分析代码 import ast class ImportNodeVisitor(ast.NodeVisitor): def visit_Import(self, node):
import foo
def func():
from bar import *
return 42
我想知道模块foo和bar正在被导入。我希望避免正则表达式或模式匹配。您可以使用来分析代码
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)
你是想用你的函数定义来隐藏导入的foo吗?呃,不是。只是我对foo的爱。谢谢你,太好了。谢谢Martijn。没有玩过访问AST节点的游戏。