Я работаю над проектом, который содержит около 30 уникальных модулей. Он не был спроектирован слишком хорошо, поэтому очень часто я создаю круговой импорт при добавлении новых функций в проект.
Конечно, когда я добавляю циклический импорт, я не знаю об этом. Иногда довольно очевидно, что я сделал круговой импорт, когда получаю ошибку, например AttributeError: 'module' object has no attribute 'attribute', где я четко определил 'attribute'. Но в других случаях код не генерирует исключений из-за того, как он используется.
Итак, на мой вопрос:
Можно ли программно определить, когда и где происходит циклический импорт?
Единственное решение, о котором я могу думать до сих пор, - иметь модуль importTracking, содержащий dict importingModules, функцию importInProgress(file), которая увеличивает importingModules[file] и выдает ошибку, если она больше 1, и функцию importComplete(file), которая уменьшает importingModules[file]. Все остальные модули выглядели бы так:
import importTracking
importTracking.importInProgress(__file__)
#module code goes here.
importTracking.importComplete(__file__)
Но это выглядит действительно противно, должен быть лучший способ сделать это, верно?
