from ast import parse, NodeVisitor
class ImportVisitor(NodeVisitor):
def __init__(self):
self.imported = set()
super(ImportVisitor, self).__init__()
def __str__(self):
return '\n'.join(x for x in self.imported)
def visit_Import(self, node):
for n in node.names:
self.imported.add(n.name)
#that we are using
def visit_ImportFrom(self, node):
self.imported.add(node.module)
Class CollectImports(object):
"""
Import hook, adds each import request to the loaded set and dumps
them to file
"""
def __init__(self, output_file):
self.loaded = defaultdict(lambda: set())
self.output_file = output_file
def __str__(self):
return str(self.loaded)
def cleanup(self):
"""Dump the loaded set to file
"""
dumped_str = '\n'.join(('%s: %s' % (k, v)) for k, v in self.loaded.items())
open(self.output_file, 'w').write(dumped_str)
def find_module(self, module_name, package=None):
st = inspect.stack()
self.loaded[st[1][1]].add(module_name)
所以我在snakefood中做得更好,最后用AST重写了代码。 Snakefood仍然使用编译器,这是弃用的,比使用ast慢得多。在
结果很好,例如这是一个访客:
可用于例如:
^{pr2}$检查技巧似乎很有效:) 我有点像简单.py:在中设置(['study_imports'])导入.log. 在
也许用inspect模块。在
模块a.py
模块b.py
^{pr2}$运行b.py时,我得到:
看起来第二帧包含了你需要的。在
相关问题 更多 >
编程相关推荐