2012-08-02 3 views
11

Come programmatori leggiamo più di quanto scriviamo. Ho iniziato a lavorare in un'azienda che utilizza un paio di pacchetti Python "grandi"; pacchetti o famiglie di pacchetti con un KLOC elevato. Caso in questione: Zope.Navigazione rapida di una grande base di codici Python

Il mio problema è che ho problemi a navigare in questo codice base velocemente/facilmente. La mia strategia attuale è

  • inizio a leggere un modulo ho bisogno di cambiare/capire
  • ho colpito uno di importazione, che ho bisogno di sapere di più di
  • ho scoprire dove il codice sorgente per che l'importazione è di ponendo un'istruzione debug di Python (pdb) dopo le importazioni e facendo eco al modulo, che mi dice che è il file sorgente
  • Ci si avvicina ad esso, nella shell o nel file explorer di Vim.
  • la maggior parte delle volte il modulo stesso importa più moduli e prima che io so che devo 10KLOC "sul mio piatto"

alternativa:

  • vedo un metodo/classe ho bisogno per saperne di più di
  • faccio una ricerca (ACK-grep) per la definizione di tale metodo/classe su tutta la base di codice (che può essere un dolore, perché la base di codice è in parte in ~/.buildout-uova)
  • Trovo uno o più pezzi di codice che definiscono quel metodo/Classe
  • devo dedurre che uno di loro è quello che ho bisogno di leggere

Questo costa un sacco di tempo, il che è comprensibile per una grande base di codice. Ma ho l'impressione che lo che navighi su un codice Python numeroso e sconosciuto sia un problema abbastanza comune.

Quindi sto cercando strumenti tecnici o soluzioni strategiche per questo problema. ...

I just non può immaginare programmatori Python hardcore utilizzando le strategie descritte sopra.

+1

https://github.com/mkomitee/vim-gf-python potrebbe interessarti, o più semplicemente: http://vim.wikia.com/wiki/Automatically_add_Python_paths_to_Vim_path –

+0

Haha, come si suol dire, "problemi del primo mondo" ... se potessimo farlo con i progetti in C (che di solito non possiamo a meno che codice macchina non elaborato è la tua tazza di tè) il KLOC sarebbe probabilmente più vicino a 100K; p –

risposta

8

su Vim, mi piace NERDTree (un browser di file) e taglist.vim (codice sorgente del browser ->http://www.vim.org/scripts/script.php?script_id=273)

anche in Vim, è possibile utilizzare CTRL-] per passare a una definizione (: h CTRL-]):

  1. scaricare ctags esuberanti http://ctags.sourceforge.net/
  2. segui le istruzioni di installazione e mettila da qualche parte sul tuo PATH
  3. dalla directory 'root' del tuo codice sorgente, crea un file tag dalla shell: "ctags -R"
  4. (assicurati di avere: set noautochdir, e assicurarsi: pwd è la directory root fr om fase 3)
  5. andare in Vim, cursore sopra qualche nome di funzione o di classe, ha colpito CTRL-]

per impostazione predefinita, se non c'è più corrispondenze per il tag, vi mostra in tutto il mondo è stato importato, e dove è stato dichiarato

se il tag ha solo una partita, salta immediatamente ad esso

... quindi utilizzare CTRL + O e Ctrl + I per muoversi avanti e indietro da dove eravate

(ripeti i passaggi precedenti per il codice sorgente di parti librerie colari si utilizza, io di solito tenere una finestra aperta Vim separata per studiare roba)

+2

+1 per Ctags esuberante. L'originale "IDE" era 'vi' plus' ctags', e 'vim' è anche meglio di' vi' ed Exuberant Ctags è persino migliore del 'ctags' originale. – steveha

+0

Si noti che 'ctags -R' potrebbe non funzionare su OSX, che viene fornito con una versione di' ctags' senza l'opzione '-R'. Vedi http://stackoverflow.com/questions/8996387/am-i-even-using-exuberant-ctags. – nofinator

5

Io uso ipython ?? comando

Hai solo bisogno di capire come importare le cose che vuoi cercare, quindi aggiungi ?? alla fine del modulo o classe o funzione o nome del metodo per visualizzare il loro codice sorgente. E il completamento dei comandi aiuta a capire anche i nomi lunghi.

-1
+1

Questa è una cattiva risposta. È 1) un link che risponda solo 2) al progetto del poster 3) che è morto. Aggiornamento –

+0

: questo collegamento non è morto. Ho sentito molte cose positive sulla modalità Python. Lo uso da alcuni giorni e mi piace davvero. –