2010-11-12 2 views
22

Я унаследовал огромную базу кода, в которой мне нужно внести небольшие изменения. Мне было интересно, есть ли утилит, которые будут анализировать код python и давать зависимости между функциями, например, если я вношу изменения в функцию, я хочу быть уверенным, что я не сломаю другие функции, поэтому, если бы я мог видеть на графике, как диаграмма, облегчит мне жизнь.Создание графиков зависимостей в Python

+0

См. Также http://stackoverflow.com/questions/798389/python-tool-that-builds-a-dependency-diagram-for-methods-of-a-class – Vanuan

ответ

21
  • Обычно «зависимость» определяется для импорта модулей/пакетов.
  • Что вы ищете - это визуализирующий поток вызовов.

  • Вы можете по-прежнему не гарантирует, что вы не нарушите функциональность :)

  • Мой опыт и решения:

    Много раз, я обнаружил, что поток вызовов данные подавляющие, а диаграмма слишком сложная. Итак, что я обычно делаю, это поток вызова вызова частично для функции, меня интересует.

    Это делается с помощью функции sys.settrace (...). После генерации потоков вызовов в виде текстовых данных я генерирую график вызовов, используя graphviz.

[Edit: на основе комментариев]

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

Я пытался это сделать и сделал few post, который работает на этом понимании.

+4

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

+0

Я не ищу серебряную пулю. Я ищу больше, чтобы дать мне общую идею. – anijhaw

+0

@anijhaw: Тогда вы его получили. :) pycallgraph должен выполнять свою работу. Я также предоставил решение, которое я использую чаще, чтобы узнать, что происходит. Однако это может быть затруднено. Попробуйте трассировать вызовы в скрученном приложении. – pyfunc

Смежные вопросы