2012-02-17 2 views
4

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

+0

Интерпретатор Python, похоже, очень легко находит все мое, но я предполагаю, что вы ищете какой-то инструмент статического анализа ..... – boatcoder

+0

Да, я знаю, что некоторые могут быть обнаружены только во время выполнения, но я думаю, что большинство из нас может быть обнаружено статически. – Nix

+1

Возможный дубликат [Обнаружение циклического импорта] (http://stackoverflow.com/questions/2406007/detecting-circular-imports) –

ответ

2

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

Сделать переводческую работу для Вас

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

$ python -v stub_module.py 

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

Использование logilab.astng

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

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