Я работаю над проектом, который содержит около 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__)
Но это выглядит действительно противно, должен быть лучший способ сделать это, верно?