我即将达到我的最终目标,那就是生成一个漂亮的图表,展示模块与其他导入的模块之间的关系。
例如,如果x从y和z导入,而y又从t和v导入,我希望得到以下结果:
现在我已经定义了以下导入钩子,但在简单文件上运行它时,我没有得到我所期望的结果:
例如,如果x从y和z导入,而y又从t和v导入,我希望得到以下结果:
x -> y, z
y -> t, v
现在我已经定义了以下导入钩子,但在简单文件上运行它时,我没有得到我所期望的结果:
python study_imports.py CollectImports simple.py
('study_imports.py', 'study_imports')
simple.py实际上是从study_imports导入的。问题在于我想看到"simple.py"而不是"study_imports.py",有没有办法获取实际导入其他模块的文件路径?
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 = 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(x for x in self.loaded)
open(self.output_file, 'w').write(dumped_str)
def find_module(self, module_name, package=None):
#TODO: try to find the name of the package which is actually
#importing something else, and how it's doing it
#use a defualtdict with empty sets as the storage for this job
entry = (__file__, module_name)
self.loaded.add(str(entry))
sfood-graph
吗? - Sven Marnach