2010-11-12 24 views
22

Heredé una gran base de código en la que necesito hacer algunos pequeños cambios. Me preguntaba si habría utilidades que analizarían el código python y darían dependencias entre funciones, como si, si hiciera cambios a una función, quisiera asegurarme de que no rompo otras funciones, así que si pudiera ver en un gráfico como el diagrama, me haría la vida más fácil.Creando Gráficos de Dependencia en Python

+0

Vea también http://stackoverflow.com/questions/798389/python-tool-that-builds-a-dependency-diagram-for-methods-of-a-class – Vanuan

Respuesta

21
  • Por lo general, la "dependencia" se define para la importación de módulo/paquete.
  • Lo que está buscando es una visualización del flujo de llamadas.

  • Puede no tendría ninguna garantía de que no se rompa la funcionalidad :)

  • mi experiencia y soluciones:

    Muchas veces, he encontrado el flujo de llamadas datos abrumadores y el diagrama demasiado complejo. Lo que suelo hacer es rastrear el flujo de llamadas parcialmente para la función, estoy interesado en.

    Esto se hace mediante la función sys.settrace (...). Después de generar los flujos de llamadas como datos de texto, genero un gráfico de llamadas usando graphviz.

[Editar: basado en los comentarios]

Entonces mi solución fragmentaria funciona mejor. Simplemente inserte el código y use el decorador en una función que quiera rastrear. Verá las lagunas en las que el diferido entra en escena, pero eso puede resolverse. No obtendrá la imagen completa directamente.

He estado tratando de hacer eso e hice un few post que funciona en ese entendimiento.

+4

+1 para el último punto sobre garantías. Me quedaría muy impresionado si pudiera seguir gran parte del tipo de código que usa mucho HOF y otras características dinámicas. Me imagino que sería útil principalmente para evaluar el trabajo de los programadores que no son lo suficientemente inteligentes como para usar tales características o lo suficientemente inteligentes como para no hacerlo. – aaronasterling

+0

No estoy buscando una bala de plata. Lo que estoy buscando es más para darme una idea general. – anijhaw

+0

@anijhaw: Entonces lo tienes. :) pycallgraph debería hacer tu trabajo. También proporcioné la solución que uso con más frecuencia para saber qué sucede. Esto puede ser difícil sin embargo. Trate de rastrear llamadas en una aplicación retorcida. – pyfunc

Cuestiones relacionadas