Я унаследовал огромную базу кода, в которой мне нужно внести небольшие изменения. Мне было интересно, есть ли утилит, которые будут анализировать код python и давать зависимости между функциями, например, если я вношу изменения в функцию, я хочу быть уверенным, что я не сломаю другие функции, поэтому, если бы я мог видеть на графике, как диаграмма, облегчит мне жизнь.Создание графиков зависимостей в Python
ответ
- Обычно «зависимость» определяется для импорта модулей/пакетов.
Что вы ищете - это визуализирующий поток вызовов.
Вы можете по-прежнему не гарантирует, что вы не нарушите функциональность :)
Мой опыт и решения:
Много раз, я обнаружил, что поток вызовов данные подавляющие, а диаграмма слишком сложная. Итак, что я обычно делаю, это поток вызова вызова частично для функции, меня интересует.
Это делается с помощью функции sys.settrace (...). После генерации потоков вызовов в виде текстовых данных я генерирую график вызовов, используя graphviz.
- http://docs.python.org/library/sys.html
- On call tracing
- Для создания графики, использовать Graphviz решения от networkX.
[Edit: на основе комментариев]
Тогда мое решение по частям работает лучше. Просто вставьте код и используйте декоратор на функцию, которую вы хотите проследить. Вы увидите промежутки, в которых отложенные изображения попадают в картину, но это может быть выработано. Вы не получите полную картину напрямую.
Я пытался это сделать и сделал few post, который работает на этом понимании.
+1 для последнего вопроса о гарантиях. Я был бы очень впечатлен, если бы он мог следовать многим типам кода, который использует много HOF и других динамических функций. Я полагаю, что это было бы полезно в основном для оценки работы программистов, которые либо недостаточно умны, чтобы использовать такие функции, либо достаточно умны, чтобы этого не делать. – aaronasterling
Я не ищу серебряную пулю. Я ищу больше, чтобы дать мне общую идею. – anijhaw
@anijhaw: Тогда вы его получили. :) pycallgraph должен выполнять свою работу. Я также предоставил решение, которое я использую чаще, чтобы узнать, что происходит. Однако это может быть затруднено. Попробуйте трассировать вызовы в скрученном приложении. – pyfunc
См. Также http://stackoverflow.com/questions/798389/python-tool-that-builds-a-dependency-diagram-for-methods-of-a-class – Vanuan