Python: скрипт для обнаружения циклического импорта

Кто-нибудь знает библиотеку / скрипт, который может сканировать исходные каталоги и обнаруживать циклический импорт?

1 ответ

Решение

Я не знаю ни одного инструмента прямо, но есть несколько способов, которыми я могу думать прямо сейчас, чтобы получить эти данные.

Заставить переводчика работать на вас

Для каждого имеющегося модуля создайте модуль-заглушку, который импортирует его, а затем запустите этот модуль с

$ python -v stub_module.py

Это работает только в том случае, если вы не полагаетесь на хакерство sys.path и ваши модули не имеют опасных побочных эффектов при импорте (обе очень сомнительные возможности FWIW). Вы получите транзитивное закрытие импорта, но обнаружение циклического импорта с этим должно быть простым.

Используйте logilab.astng

С logilab.astng легко извлечь весь прямой импорт ваших модулей (ищите узлы типа logilab.astng.nodes.From а также logilab.astng.nodes.Import). Как только у вас появится список прямых импортов всех модулей, создайте графики импорта и найдите циклы.

Опять же, это работает, только если вы не используете хаки sys.path.

Другие вопросы по тегам