Come documentare il codice Python usando Doxygen [chiuso]


94

Mi piace che Doxygen crei documentazione di codice C o PHP. Ho un imminente progetto Python e penso di ricordare che Python non ha /* .. */commenti e ha anche una propria funzione di auto-documentazione che sembra essere il modo pitonico di documentare.

Dato che ho familiarità con Doxygen, come posso usarlo per produrre la mia documentazione Python? C'è qualcosa in particolare di cui devo essere a conoscenza?

Risposte:


62

Questo è documentato sul sito web di doxygen , ma per riassumere qui:

Puoi usare doxygen per documentare il tuo codice Python. Puoi utilizzare la sintassi della stringa di documentazione di Python:

"""@package docstring
Documentation for this module.

More details.
"""

def func():
    """Documentation for a function.

    More details.
    """
    pass

In tal caso i commenti verranno estratti da doxygen, ma non sarai in grado di utilizzare nessuno dei comandi speciali di doxygen .

Oppure puoi (simile ai linguaggi in stile C sotto doxygen) raddoppiare il marcatore di commento ( #) sulla prima riga prima del membro:

## @package pyexample
#  Documentation for this module.
#
#  More details.

## Documentation for a function.
#
#  More details.
def func():
    pass

In tal caso, puoi usare i comandi speciali doxygen. Non esiste una particolare modalità di output Python, ma a quanto pare puoi migliorare i risultati impostando OPTMIZE_OUTPUT_JAVAsu YES.

Onestamente, sono un po 'sorpreso della differenza: sembra che una volta che doxygen possa rilevare i commenti nei blocchi ## o nei blocchi "" ", la maggior parte del lavoro sarebbe stata eseguita e saresti stato in grado di usare i comandi speciali in In entrambi i casi, forse si aspettano che le persone che usano "" "aderiscano a più pratiche di documentazione Pythonic e questo interferirebbe con i comandi speciali di doxygen?


57
I commenti come documentazione in Python sono cattivi. I commenti sono per un manutentore di moduli (perché e come implementati). Tutta la documentazione dovrebbe essere in docstrings (come usare).
jfs

4
Python inserirà i commenti e li utilizzerà come docstring, quindi i due formati funzionano entrambi con pydoc.
docwhat

10
Dai un'occhiata a doxypy che rende possibile usare i comandi speciali all'interno delle normali docstring.
Mauro

84

Il filtro di input doxypy ti consente di utilizzare praticamente tutti i tag di formattazione di Doxygen in un formato docstring Python standard. Lo uso per documentare un grande framework misto di applicazioni di gioco C ++ e Python, e funziona bene.


2
È triste che questa risposta, essendo quella corretta per la domanda, sia anche in fondo :(
Dave Lasley

9
Potresti anche voler controllare doxypypy in quanto convertirà le docstring Pythonic in qualcosa che Doxygen può usare.
Feneric

8
Doxypy sembra essere morto e andato ..
nought101

24

Alla fine, hai solo due opzioni:

Genera i tuoi contenuti usando Doxygen o generi i tuoi contenuti usando Sphinx *.

  1. Doxygen : non è lo strumento preferito dalla maggior parte dei progetti Python. Ma se hai a che fare con altri progetti correlati scritti in C o C ++ potrebbe avere senso. Per questo puoi migliorare l'integrazione tra Doxygen e Python usando doxypypy .

  2. Sphinx : lo strumento di fatto per documentare un progetto Python. Hai tre opzioni qui: manuale, semiautomatica (generazione di stub) e completamente automatica (tipo Doxygen).

    1. Per la documentazione API manuale hai Sphinx autodoc . È fantastico scrivere una guida utente con elementi generati dall'API incorporata.
    2. Per il semiautomatico hai Sphinx autosummary . Puoi impostare il tuo sistema di compilazione per chiamare sphinx-autogen o configurare il tuo Sphinx con il file autosummary_generateconfig. Sarà necessario impostare una pagina con i riassunti automatici, quindi modificare manualmente le pagine. Hai delle opzioni, ma la mia esperienza con questo approccio è che richiede troppa configurazione e alla fine, anche dopo aver creato nuovi modelli, ho trovato bug e l'impossibilità di determinare esattamente cosa era esposto come API pubblica e cosa no. La mia opinione è che questo strumento è buono per la generazione di stub che richiederà la modifica manuale e nient'altro. È come una scorciatoia per finire in manuale.
    3. Completamente automatico. Questo è stato criticato molte volte e per molto tempo non abbiamo avuto un buon generatore di API Python completamente automatico integrato con Sphinx fino a quando non è arrivato AutoAPI , che è un nuovo ragazzo nel blocco. Questo è di gran lunga il migliore per la generazione automatica di API in Python (nota: auto-promozione spudorata).

Ci sono altre opzioni da notare:

  • Respira : è iniziata come un'idea molto buona e ha senso quando lavori con diversi progetti correlati in altre lingue che utilizzano Doxygen. L'idea è di utilizzare l'output XML di Doxygen e inviarlo a Sphinx per generare la tua API. Quindi, puoi mantenere tutta la bontà di Doxygen e unificare il sistema di documentazione in Sphinx. Fantastico in teoria. Ora, in pratica, l'ultima volta che ho controllato il progetto non era pronto per la produzione.
  • pydoctor *: Molto particolare. Genera il proprio output. Ha un'integrazione di base con Sphinx e alcune caratteristiche interessanti.

Qual è il comando per utilizzare autoapi. Ho modificato conf.py per includere i moduli autoapi. Attualmente, eseguo "sphinx-apidoc -o apidocs --full".
Sandeep

Non hai bisogno di un comando extra. Costruisci la tua documentazione Sphinx usando sphinx-build. L'ho integrato con Tox in questo modo: github.com/HPENetworking/cookiecutter_python/blob/module/…
Havok

@Havok Non vedo come AutoAPI sia "completamente automatico" quando devo mettere tutti gli elementi di un modulo nella __all__variabile explicite.
buhtz

20

Sphinx è principalmente uno strumento per la formattazione di documenti scritti indipendentemente dal codice sorgente, a quanto ho capito.

Per la generazione di documenti API da docstring Python, gli strumenti principali sono pdoc e pydoctor . Ecco i documenti API generati da pydoctor per Twisted e Bazaar .

Ovviamente, se vuoi solo dare un'occhiata alle docstring mentre lavori, c'è lo strumento a riga di comando " pydoc " e anche la help()funzione disponibile nell'interprete interattivo.


2
È vero, che sphinx usa documenti scritti indipendentemente dal codice sorgente come base, ma usando l'estensione autodoc si possono facilmente includere docstrings da moduli python. A causa della sua natura dinamica, trovo la documentazione scritta a mano per i moduli python più utile dei documenti api generati.
Peter Hoffmann

3
I documenti "scritti a mano" non sono disponibili quando si cerca di approfondire la struttura e la relazione tra le classi in un progetto poco documentato.
Ярослав Рахматуллин

13

Un altro ottimo strumento di documentazione è Sphinx . Verrà utilizzato per la prossima documentazione di python 2.6 ed è utilizzato da django e da molti altri progetti python.

Dal sito web della Sfinge:

  • Formati di output : HTML (inclusa la Guida HTML di Windows) e LaTeX, per le versioni PDF stampabili
  • Riferimenti incrociati estesi : markup semantico e collegamenti automatici per funzioni, classi, termini del glossario e informazioni simili
  • Struttura gerarchica : facile definizione di un albero dei documenti, con collegamenti automatici a fratelli, genitori e figli
  • Indici automatici : indice generale e indice del modulo
  • Gestione del codice : evidenziazione automatica utilizzando l'evidenziatore Pygments
  • Estensioni : test automatico degli snippet di codice, inclusione di docstring dai moduli Python e altro

11
L'ho provato. Sebbene la sfinge di per sé sia ​​uno strumento molto interessante, non era quello che mi aspettavo da doxygen. Più che altro uno strumento per un ottimo documento del cliente finale, doxygen è molto meglio per un progettista SW che vorrebbe semplicemente vedere una panoramica delle API in un bel formato stampabile.
Zane

3
@Zane sono d'accordo. Come amante di Doxygen mi mancava troppo la generazione completamente automatica della guida di riferimento API. Controlla la mia risposta poiché ora è disponibile un'altra opzione.
Havok
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.