Python: скрипт для обнаружения циклического импорта
Кто-нибудь знает библиотеку / скрипт, который может сканировать исходные каталоги и обнаруживать циклический импорт?
1 ответ
Я не знаю ни одного инструмента прямо, но есть несколько способов, которыми я могу думать прямо сейчас, чтобы получить эти данные.
Заставить переводчика работать на вас
Для каждого имеющегося модуля создайте модуль-заглушку, который импортирует его, а затем запустите этот модуль с
$ python -v stub_module.py
Это работает только в том случае, если вы не полагаетесь на хакерство sys.path и ваши модули не имеют опасных побочных эффектов при импорте (обе очень сомнительные возможности FWIW). Вы получите транзитивное закрытие импорта, но обнаружение циклического импорта с этим должно быть простым.
Используйте logilab.astng
С logilab.astng легко извлечь весь прямой импорт ваших модулей (ищите узлы типа logilab.astng.nodes.From
а также logilab.astng.nodes.Import
). Как только у вас появится список прямых импортов всех модулей, создайте графики импорта и найдите циклы.
Опять же, это работает, только если вы не используете хаки sys.path.