2008-09-12 31 views
60

Me gusta doxygen para crear documentación de código C o PHP. Tengo un próximo proyecto de Python y creo recordar que Python no tiene /* .. */ comentarios, y también tiene su propia función de auto-documentación que parece ser la manera pitónica de documentar.Cómo documentar el código de Python con doxygen

Como estoy familiarizado con doxygen, ¿cómo puedo usarlo para producir mi documentación de Python? ¿Hay algo en particular que deba tener en cuenta?

Respuesta

39

Ésta es documented on the doxygen website, pero para resumir aquí:

Puede utilizar doxygen para documentar su código Python. También se puede usar la sintaxis de cadena de documentación de Python:

"""@package docstring 
Documentation for this module. 

More details. 
""" 

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

    More details. 
    """ 
    pass 

en cuyo caso los comentarios serán extraídos por doxygen, pero usted no será capaz de utilizar cualquiera de los special doxygen commands.

O puede (similar a los lenguajes de tipo C bajo doxygen) doblar el marcador de comentario (#) en la primera línea antes de que el miembro de:

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

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

En ese caso, se puede utilizar el comandos doxygen especiales. No hay un modo de salida de Python en particular, pero aparentemente puede mejorar los resultados configurando OPTMIZE_OUTPUT_JAVA en YES.

Honestamente, estoy un poco sorprendido por la diferencia - parece que una vez que doxygen puede detectar los comentarios en ## bloques o "" "bloques, la mayor parte del trabajo estaría terminado y usted sería capaz de usar los comandos especiales en ambos casos. ¿Tal vez esperan que las personas que usan "" "se adhieran a más prácticas de documentación de Pythonic y que interfieran con los comandos especiales de doxygen?

+49

Comentarios como la documentación en Python es malo. Los comentarios son para un mantenedor del módulo (por qué y cómo se implementó). Toda la documentación debe estar en docstrings (cómo usarla). – jfs

+4

Python extraerá los comentarios y los usará como documentos, por lo que ambos formatos funcionan con pydoc. –

+10

Eche un vistazo a [doxypy] (http://code.foosel.org/doxypy) que hace posible usar los _comandos especiales_ dentro de las cadenas de documentos normales. – Mauro

12

Otra herramienta de documentación muy buena es sphinx. Se usará para el próximo pitón 2.6 documentation y es utilizado por django y muchos otros proyectos de python.

Desde la página web de la esfinge:

  • Los formatos de salida: HTML (incluyendo Windows HTML Help) y LaTeX, para las versiones imprimibles PDF
  • extensas referencias cruzadas: el marcado semántico y enlaces automáticos para funciones, clases, términos del glosario y datos similares
  • Estructura jerárquica: fácil definición de un árbol de documentos, con enlaces automáticos a sibli NGS, los padres y los niños
  • índices automáticos: índice general, así como un índice de módulos
  • manejo Código: resaltado automático utilizando el Pygments highlighter
  • Extensiones: prueba automática de fragmentos de código, la inclusión de docstrings de módulos Python, y más
+9

Lo he intentado. Si bien la esfinge en sí misma es una herramienta muy interesante, no era lo que esperaba que viniera de doxygen. Más una herramienta para el doc. Del cliente final realmente bueno, doxygen es mucho mejor para un diseñador de SW que simplemente desea ver una descripción general de API en un buen formato imprimible. – Zane

+1

@Zane Estoy de acuerdo. Como amante de Doxygen, extrañaba demasiado la generación de guías de referencia de API totalmente automáticas. Verifique mi respuesta ya que ahora hay otra opción disponible. – Havok

20

Sphinx es principalmente una herramienta para formatear documentos escritos independientemente del código fuente, según tengo entendido.

Para generar documentos API de cadenas de Python, las herramientas principales son pdoc y pydoctor. Aquí están los documentos API generados por pydoctor para Twisted y Bazaar.

Por supuesto, si solo quiere echar un vistazo a los documentos mientras trabaja en cosas, existe la herramienta de línea de comandos "pydoc" y la función help() disponible en el intérprete interactivo.

+2

Es cierto, que sphinx usa documentos escritos independientemente del código fuente como base, pero usando la extensión autodoc uno puede incluir fácilmente docstrings de módulos de python. Debido a su naturaleza dinámica, encuentro que la documentación manuscrita para los módulos de Python es más útil que los documentos api generados. –

+3

Los documentos "escritos a mano" no están disponibles cuando intenta asimilar la estructura y la relación entre clases en algún proyecto poco documentado. –

57

El filtro de entrada doxypy le permite usar prácticamente todas las etiquetas de formato de Doxygen en un formato de docstring estándar de Python. Lo uso para documentar un gran marco mixto de aplicaciones de juegos de C++ y Python, y está funcionando bien.

+0

Gracias! Esto me ayudó bastante hoy. –

+0

Es triste que esta respuesta, siendo la correcta para la pregunta, también esté en la parte inferior :( –

+1

También es posible que desee verificar [doxypypy] (https://pypi.python.org/pypi/doxypypy) ya que Convierta las cadenas Pythonic en algo que Doxygen pueda usar. – Feneric

9

Al final, sólo tiene dos opciones:

de generar el contenido usando Doxygen, o generar su contenido usando Sphinx *.

  1. Doxygen: No es la herramienta de elección para la mayoría de los proyectos de Python. Pero si tiene que tratar con otros proyectos relacionados escritos en C o C++ podría tener sentido. Para esto puede mejorar la integración entre Doxygen y Python usando doxypypy.

  2. Sphinx: La herramienta de hecho para documentar un proyecto de Python. Aquí tiene tres opciones: manual, semiautomática (generación de stub) y totalmente automática (similar a Doxygen).

    1. Para la documentación de la API manual tiene Sphinx autodoc. Esto es excelente para escribir una guía de usuario con elementos generados API incorporados.
    2. Para semiautomático tiene Sphinx autosummary. Puede configurar su sistema de compilación para llamar a sphinx-autogen o configurar su Sphinx con la configuración autosummary_generate. Tendrá que configurar una página con las autosummias y luego editar las páginas manualmente. Tienes opciones, pero mi experiencia con este enfoque es que requiere demasiada configuración, y al final, incluso después de crear nuevas plantillas, encontré errores y la imposibilidad de determinar exactamente qué fue lo que se expuso como API pública y qué no. Mi opinión es que esta herramienta es buena para la generación de stubs que requerirá edición manual, y nada más. Es como un atajo para terminar en manual.
    3. Totalmente automático. Esto ha sido criticado muchas veces y durante mucho tiempo no tuvimos un buen generador de API Python completamente automático integrado con Sphinx hasta que llegó AutoAPI, que es un chico nuevo en el bloque. Este es de lejos el mejor para la generación automática de API en Python (nota: autopromoción desvergonzada).

hay otras opciones a tener en cuenta:

  • Breathe: esto comenzó como una muy buena idea, y tiene sentido cuando se trabaja con varios proyectos relacionados en otros idiomas que utilizan Doxygen. La idea es usar la salida Doxygen XML y alimentarla a Sphinx para generar su API. Por lo tanto, puede mantener todas las bondades de Doxygen y unificar el sistema de documentación en Sphinx. Impresionante en teoría. Ahora, en la práctica, la última vez que revisé el proyecto no estaba listo para la producción.
  • pydoctor *: Muy particular. Genera su propio resultado Tiene una integración básica con Sphinx y algunas características agradables.
+0

¿Cuál es el comando para usar autoapi? He modificado conf.py para incluir módulos autoapi. Actualmente, ejecuto "sphinx-apidoc -o apidocs --full." – Sandeep

+0

No necesitas un comando extra. Solo construye tu documentación de Sphinx usando sphinx-build. Lo he integrado con Tox de esta manera: https://github.com/HPENetworking/cookiecutter_python/blob/module/%7B%7Bcookiecutter. repo_name% 7D% 7D/tox.ini # L30 – Havok

Cuestiones relacionadas