Я приближаюсь к своей конечной цели, которая заключается в создании хорошего графика между модулями и другими импортированными модулями.
Например, если x импортирует из y и z, а y импортирует из t и vЯ хотел бы иметь:
x -> y, z
y -> t, v
Теперь я уже определил свой крючок импорта, как показано ниже, но, запустив его в простом файле, я не получил то, что ожидал:1008 * Где 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))