Skip to main content
 首页 » 编程设计

python之检测导入的对象

2025年05月04日10mayingbao

给定一个 Python 文件的源代码,我想检测所有导入的对象。例如,给定此来源:

import mymod 
from mymod2 import obj1, obj2, obj3 
from mymod3 import aobj 

我想得到:

[('mymod2', 'obj1', 'obj2', 'obj3'), ('mymod3', 'aobj')] 

我已经尝试过这个正则表达式:

r'from (?P<mod>[_\w\d]+) import (?:(?P<obj>[_\w\d]+)[,\s]?)+' 

但我只得到第一个导入的对象:

[('mymod2', 'obj1'), ('mymod3', 'aobj')] 

请您参考如下方法:

比正则表达式更好的工具是Python自带的ast模块。要在 a.py 的最外层范围内查找所有 from ... import 语句并打印所有导入的名称,您可以使用

import ast 
code = open("a.py").read() 
for node in ast.parse(code).body: 
    if isinstance(node, ast.ImportFrom): 
        for name in node.names: 
            print name.name 

请注意,这个简单的代码会遗漏任何不直接在模块级别的语句,例如 try block 中的 import 语句。这可以通过使用 ast.walk() 遍历所有节点轻松解决。