2013-12-07 3 views
1

Есть ли способ проверить исходный код (или скомпилированный объект кода) и указать, какие модули импортируются в Python 3.3?Как узнать, какие модули были импортированы в некоторый исходный код?

Например, в:

import foo 

def func(): 
    from bar import * 
    return 42 

Я хотел бы быть в состоянии сказать, что модули Foo и бар были импортированы. Я надеюсь избежать регулярного выражения или соответствия шаблону.

+0

вы имели в виду теневым импортируемого Foo с вашей функцией опр? – roippi

+0

Er, no. Просто моя любовная интрига с фью. Спасибо, что поймали. – capitalistcuttle

ответ

5

Вы можете использовать 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) 
+0

Отлично. Спасибо Martijn. Не играл с посещающими узлами AST. – capitalistcuttle

Смежные вопросы