Кто-нибудь знает библиотеку/скрипт, который может сканировать исходные каталоги и обнаруживать циклический импорт?Python: скрипт для обнаружения круговых вводок
ответ
Я не знаю ни одного инструмента, но есть несколько способов, о которых я могу думать прямо сейчас, чтобы получить эти данные.
Сделать переводческую работу для Вас
Для каждого модуля у вас есть, создать модуль заглушки, который импортирует его, а затем запустить этот модуль с
$ python -v stub_module.py
это работает только, если вы не полагаться на sys.path хакерство и ваши модули не имеют опасных побочных эффектов при импорте (обе очень сомнительные функции FWIW). Вы получите транзитное закрытие импорта, но обнаружение циклического импорта с этим должно быть простым.
Использование logilab.astng
С logilab.astng, легко извлечь весь прямой импорт ваших модулей (смотрите для узлов типа logilab.astng.nodes.From
и logilab.astng.nodes.Import
). После того, как у вас есть список прямого импорта всех модулей, создайте графики импорта и найдите циклы.
Опять же, это работает только в том случае, если вы не используете sys.path-хаки.
Интерпретатор Python, похоже, очень легко находит все мое, но я предполагаю, что вы ищете какой-то инструмент статического анализа ..... – boatcoder
Да, я знаю, что некоторые могут быть обнаружены только во время выполнения, но я думаю, что большинство из нас может быть обнаружено статически. – Nix
Возможный дубликат [Обнаружение циклического импорта] (http://stackoverflow.com/questions/2406007/detecting-circular-imports) –