2010-11-12 5 views
22

J'ai hérité d'une énorme base de code dans laquelle j'ai besoin de faire de petits changements. Je me demandais s'il y a des utilitaires qui analyseraient le code python et donneraient des dépendances entre les fonctions, comme si je faisais des changements à une fonction je veux être sûr de ne pas casser d'autres fonctions, donc si je pouvais voir dans un diagramme rendrait ma vie plus facile.Création de graphes de dépendances en Python

+0

Voir aussi http://stackoverflow.com/questions/798389/python-tool-that-builds-a-dependency-diagram-for-methods-of-a-class – Vanuan

Répondre

21
  • Habituellement, la "dépendance" est définie pour l'importation de module/paquet.
  • Ce que vous cherchez est un flux d'appel de visualisation.

  • Vous ne pouvez toujours pas garantir que vous ne cassera pas la fonctionnalité :)

  • Mon expérience et de solution:

    Plus d'une fois, j'ai trouvé le flux d'appels données écrasantes et le diagramme trop complexe. Donc ce que je fais habituellement est de suivre le flux d'appels partiellement pour la fonction, je suis intéressé.

    Ceci est fait en utilisant la fonction sys.settrace (...). Après avoir généré les flux d'appels sous forme de données textuelles, je génère un graphique d'appel en utilisant graphviz.

[Edit: en fonction des commentaires]

Ensuite, ma solution fragmentaire fonctionne mieux. Il suffit d'insérer le code et d'utiliser le décorateur sur une fonction que vous souhaitez tracer. Vous verrez des lacunes où différé entre en image mais cela peut être résolu. Vous n'obtiendrez pas l'image complète directement.

J'ai essayé de faire cela et j'ai fait un few post qui fonctionne sur cette compréhension.

+4

+1 pour le dernier point sur les garanties. Je serais très impressionné si cela pouvait suivre une grande partie du type de code qui utilise beaucoup de fonctionnalités HOF et autres dynamiques. J'imagine que ce serait utile surtout pour évaluer le travail des programmeurs qui ne sont pas assez intelligents pour utiliser de telles fonctionnalités ou assez intelligents pour ne pas le faire. – aaronasterling

+0

Je ne cherche pas de solution miracle. Ce que je cherche, c'est plus pour me donner une idée générale. – anijhaw

+0

@anijhaw: Alors vous l'avez. :) pycallgraph devrait faire votre travail. J'ai également fourni la solution que j'utilise plus fréquemment pour apprendre ce qui se passe. Cela peut être rendu difficile cependant. Essayez de suivre les appels dans une application tordue. – pyfunc