Python 如何判断哪些模块已导入某些源代码?

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):

有没有办法检查源代码(或编译后的代码对象)并告诉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):
        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节点的游戏。