Nozioni di base passo passo: documentazione automatica del codice |  di Lucy Dickinson |  Marzo 2024

 | Intelligenza-Artificiale

Ai fini di questa demo, ho creato un modulo Python demo.py che contiene una classe e tre funzioni di base (tutte annotate con docstring ad eccezione di una funzione). È per questo modulo che creerò la documentazione in questo articolo. Il contenuto di questo modulo demo.py è riportato di seguito:

Contenuto del modulo demo.py da documentare. Istantanea scattata utilizzando l'estensione CodeSnap in VS Code.

1. Configurazione

La prima cosa è configurare tutto. Dovrai installare VS Code e impostare un nuovo progetto insieme a Sphinx. Ci sono alcune opzioni qui. Puoi a) impostare un nuovo progetto utilizzando Cookiecutter (dove verrà generata la relativa configurazione di Sphinx insieme alle directory standardizzate) oppure b) creare la tua struttura di progetto e installare Sphinx separatamente.

opzione A: installa Cookiecutter

Nel terminale, installa Cookiecutter e quindi crea un nuovo progetto:

pip install cookiecutter
cookiecutter https://github.com/drivendata/cookiecutter-data-science

Successivamente, rispondi alle domande che appaiono nella finestra del terminale e il tuo nuovo progetto verrà creato. Il framework Sphinx verrà archiviato nella directory /docs del tuo progetto.

opzione B – Avvio rapido di Sphinx

Se il modello Cookiecutter non soddisfa la tua fantasia, puoi creare la struttura del tuo progetto da zero e installare sphinx. È una buona idea creare una directory di documentazione e installarvi sphinx. Nel terminale:

mkdir docs
cd docs

pip install sphinx
sphinx-quickstart

2. Comprendere la struttura delle cartelle di Sphinx

Dopo aver installato Sphinx utilizzando una delle opzioni di cui sopra, verranno visualizzati alcuni file nella directory della documentazione del tuo progetto. IL conf.py file è il file di configurazione chiave che modificherai per personalizzare la tua documentazione: maggiori dettagli nella sezione successiva. IL index.rst file funge da contenuto per la documentazione. Puoi trovare maggiori informazioni su index.rst file Qui. IL getting-started.rst E commands.rst i file sono modelli suggeriti per la documentazione. Puoi rimuoverli se necessario. I file make (make.bat E Makefile) vengono utilizzati per realizzare effettivamente la documentazione. Non è necessario modificarli, ma li richiamerai nella finestra del terminale quando sarai pronto per creare la documentazione.

File Sphinx predefiniti installati

3. File Conf.py

Il file di configurazione è dove avviene la magia. Questo file viene utilizzato durante il processo di creazione e quindi è fondamentale averlo impostato correttamente. Di seguito sono riportati alcuni passaggi per modificare il file conf.py file:

Decommentare la riga sys.path (riga 20 nella mia configurazione):

#  sys.path.insert(0,  os.path.abspath('.')) 

Cambia il percorso di os.path.abspath alla posizione relativa del codice che desideri documentare (rispetto al file conf.py file). Ad esempio, i moduli Python che voglio documentare si trovano nella directory src/ del mio progetto. Quindi cambierò os.path.abspath con l'aspetto nella directory /src che si trova nella cartella principale del conf.py file. È possibile specificare la posizione relativa utilizzando il file . e / sintassi:

sys.path.insert(0,  os.path.abspath('../src'))

"""
# you can use the following syntax to specify relative locations:

'.' # current path of conf.py
'..' # parent path of conf.py
'../..' # parent of the parent path of conf.py
"""

La posizione relativa della directory contenente i moduli Python nella cartella della documentazione. In questo esempio, 'demo.py' è il modulo da documentare, situato nella directory src/data/.

Aggiungi le estensioni pertinenti. Dovrai aggiungere alcune estensioni al file conf.py file per ottenere funzionalità extra durante la creazione della documentazione. Sono tutti opzionali e puoi divertirti esplorando le diverse estensioni disponibili Qui. Ecco le 5 estensioni che consiglio come minimo:

  • sphinx.ext.autodoc — utilizzare la documentazione da docstring
  • autodocsum – genera un riepilogo tabellare di tutte le docstring nella parte superiore della pagina html elencando solo i riepiloghi delle docstring. Utile quando hai molte docstring. Nota. dovrai installare pip autodocsumm nel terminale.
  • sfinge.ext.napoleone – consente a Sphinx di analizzare le docstring di Google
  • sphinx.ext.viewcode — aggiunge un collegamento a una pagina html contenente il codice sorgente per ciascun modulo
  • sphinx.ext.copertura — fornisce un riepilogo di quante classi/funzioni ecc. hanno docstring. Una buona copertura significa che una codebase è ben spiegata.

Ecco come includere queste estensioni nel file conf.py file (riga 29 nella mia configurazione):

#  add in the extension names to the empty list variable 'extensions'
extensions = (
'sphinx.ext.autodoc',
'sphinx.ext.napoleon',
'autodocsumm',
'sphinx.ext.coverage'
)

# add in this line for the autosummary functionality
auto_doc_default_options = {'autosummary': True}

Cambia il tema. Il tema predefinito della documentazione è abbastanza pulito, anche se potresti preferire giocare con diverse opzioni cambiando la variabile 'html_theme' (riga 94 nella mia configurazione) da 'default' a uno dei temi standard opzioni del tema o qualche opzioni di terzi. In questa demo mostrerò i temi predefiniti e Leggi i documenti.

html_theme = 'sphinx_rtd_theme' # read the docs theme. This variable is 'default' by default.

Nota. dovrai installare tramite pip eventuali temi non standard (di terze parti).

4. Crea le pagine html

Ora che il tuo conf.py è impostato e hai splendide docstring nel tuo codice, siamo pronti per fare un po' di scraping e creare alcune pagine html.

Genera i primi file .rst dei tuoi pacchetti Python

Questi file sono i precursori delle pagine html e sono il formato nativo di Sphinx. Questi devono essere generati prima di creare i file html. Utilizzerai il sfinge.apidoc comando, che utilizza l'estensione autodoc per individuare tutti i moduli Python (ad esempio eventuali file .py) all'interno della posizione sys.path specificata nel conf.py file. Ci sono alcuni parametri facoltativi da includere quando si utilizza il comando apidoc che puoi trovare nel file documentazionema ho usato il seguente modello:

Nota. nel terminale, cambia la directory nella radice del progetto per eseguire il codice seguente.

sphinx-apidoc -f -o output_dir module_dir/

-F (forza la sovrascrittura di tutti i file generati esistenti).

-o dir_output (directory in cui posizionare i file di output. Se non esiste, viene creata). Nota. sostituisci 'output_dir' con un nome di directory a tua scelta. Ho impostato il mio nella directory /docs.

dir_modulo (posizione dei pacchetti Python da documentare)

Dopo aver eseguito questo comando, nella cartella documenti dovrebbero essere presenti i file .rst appena generati.

Contenuto della cartella della documentazione dopo aver eseguito il comando sphinx-apidoc per generare i file .rst

Notare che sono stati generati due nuovi file .rst: data.rst E modules.rst. Inoltre modules.rstverrà generato un file .rst per ogni directory che contiene almeno un modulo Python. Nel mio esempio, data.rst viene generato poiché ho salvato il mio file demo.py nella cartella src/data directory. Se disponi di più directory di moduli Python nella posizione specificata in sys.path nel file conf.py file, verranno generati più file .rst. Nota. Questi file non contengono ancora la documentazione recuperata, contengono solo le informazioni necessarie affinché Autodoc crei i file html nel passaggio successivo.

Modifica il file index.rst

Ricordare, index.rst funge da pagina di contenuto quindi dobbiamo modificare questo file per includere tutti i moduli Python che vogliamo documentare. Fortunatamente, il modules.rst fa riferimento alla posizione di origine di tutti i moduli Python identificati in sys.path, quindi puoi semplicemente aggiungere questo file a index.rst.

Per fare ciò, apri il file index.rst file e aggiungi “moduli” sotto la sezione toctree (albero del sommario). Assicurati che ci sia una linea tra il parametro :max Depth: e i nomi dei file .rst.
Nota. 'getting-started' e 'commands' saranno già presenti nel file index.rst. Puoi cancellarli da questo file se non vuoi generare pagine html (anche se una pagina 'introduttiva' è probabilmente una buona idea!)

Contenuto del file index.rst. Ho aggiunto 'modules' in modo che il file module.rst venga utilizzato nel processo di generazione dell'HTML.

Crea file html

Ora possiamo usare i file make nella directory della documentazione per creare i file html. Questi file verranno visualizzati nel file _build/html/ directory all'interno della cartella della documentazione. Puoi visualizzarli in anteprima nel codice VS se scarichi l'estensione “Anteprima HTML”.

Cambia la directory in cui si trova il file make.bat ed esegui il seguente comando nel terminale cmd:

make html

Nota. se stai utilizzando il terminale Windows PowerShell (anziché cmd), utilizza la seguente sintassi:

.\make.bat html

Il miglior consiglio. se quando si utilizza il comando make html viene visualizzato un avviso che indica “autodoc: importazione del modulo non riuscita”, è molto probabile che autodoc non sia in grado di trovare i moduli poiché sys.path non è stato configurato correttamente in conf.py. Assicurati che punti alla directory in cui si trovano i tuoi moduli Python.

Modifica di file html

Se desideri modificare le tue docstring e aggiornare i tuoi file html con le modifiche, puoi farlo utilizzando il seguente comando:

make clean html

Diamo un'occhiata alla nostra documentazione!

Come ho detto sopra, ho creato della documentazione del mio modulo Python demo.py in due temi diversi visti nelle immagini sottostanti; 'default' (immagine a sinistra) e 'Leggi i documenti' (immagine a destra). Il contenuto è identico ma l'aspetto grafico è diverso. Prendiamo nota delle caratteristiche principali:

  • Barra di navigazione sul lato sinistro
  • Un riepilogo di tutte le classi o funzioni appartenenti al modulo in tabelle nella parte superiore della pagina (grazie all'estensione 'autodocsumm')
  • Elenco dettagliato dei componenti docstring per tutte le funzioni e classi sotto il riepilogo

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *