2010-11-12 16 views
22

Ho ereditato un enorme numero di codici in cui ho bisogno di apportare alcune piccole modifiche. Mi chiedevo se ci sono programmi di utilità che analizzino il codice Python e forniscano dipendenze tra le funzioni, perché se apporto modifiche a una funzione, voglio essere sicuro di non interrompere altre funzioni, quindi se potessi vedere in un grafico come il diagramma mi renderebbe la vita più facileCreazione di grafici delle dipendenze in Python

+0

Vedere anche http://stackoverflow.com/questions/798389/python-tool-that-builds-a-dipendency-diagram-for-methods-of-a-class – Vanuan

risposta

21
  • Di solito "dipendenza" è definita per importazione modulo/pacchetto.
  • Quello che stai cercando è una visualizzazione del flusso di chiamate.

  • È possibile ancora non garantisce che non sarà possibile interrompere la funzionalità :)

  • mia esperienza e la soluzione:

    Molte volte, ho trovato il flusso di chiamate dati schiaccianti e il diagramma troppo complesso. Quindi quello che faccio di solito è tracciare il flusso di chiamate parzialmente per la funzione, mi interessa.

    Questo viene fatto utilizzando la funzione sys.settrace (...). Dopo aver generato i flussi di chiamata come dati testuali, ho generato un grafico di chiamata utilizzando graphviz.

[Edit: sulla base dei commenti]

Quindi la mia soluzione frammentaria funziona meglio. Basta inserire il codice e utilizzare il decoratore su una funzione che si desidera tracciare. Vedrete le lacune in cui la differita entra in scena ma che può essere risolta. Non otterrai l'immagine completa direttamente.

Ho cercato di farlo e ho fatto un few post che funziona su quella comprensione.

+4

+1 per l'ultimo punto sulle garanzie. Sarei molto colpito se potesse seguire gran parte del tipo di codice che utilizza un sacco di HOF e altre caratteristiche dinamiche. Immagino che sarebbe utile soprattutto per valutare il lavoro dei programmatori che non sono abbastanza intelligenti da usare tali funzioni o abbastanza intelligenti da non farlo. – aaronasterling

+0

Non sto cercando un proiettile d'argento. Quello che sto cercando è più di darmi un'idea generale. – anijhaw

+0

@anijhaw: Allora hai capito. :) pycallgraph dovrebbe fare il tuo lavoro. Ho anche fornito la soluzione che uso più frequentemente per imparare cosa sta succedendo. Questo può essere reso difficile però. Prova a rintracciare le chiamate in un'applicazione contorta. – pyfunc

Problemi correlati