Estoy tratando de usar Sphinx para documentar un proyecto de más de 5,000 líneas en Python. Tiene unos 7 módulos base. Hasta donde sé, para usar autodoc necesito escribir un código como este para cada archivo en mi proyecto:
.. automodule:: mods.set.tests
:members:
:show-inheritance:
Esto es demasiado tedioso porque tengo muchos archivos. Sería mucho más fácil si pudiera especificar que quería que se documentara el paquete 'mods'. Luego, Sphinx podría revisar el paquete de forma recursiva y crear una página para cada submódulo.
¿Hay una característica como esta? Si no, podría escribir un script para hacer todos los archivos .rst, pero eso tomaría mucho tiempo.
python
python-sphinx
autodoc
Cory Walker
fuente
fuente

lsa un archivo y editarlo?Respuestas:
Puedes consultar este script que hice. Creo que te puede ayudar.
Este script analiza un árbol de directorios en busca de módulos y paquetes de Python y crea archivos ReST de manera apropiada para crear documentación de código con Sphinx. También crea un índice de módulos.
ACTUALIZAR
Este script ahora es parte de Sphinx 1.1 como apidoc .
fuente
sphinx-build -b html . ./_buildno los recoge.source directory(. En su caso). El directorio _build es donde se crearán los archivos HTML. Consulte para obtener más información: sphinx.pocoo.org/tutorial.html#running-the-build.. include:: modules.rsta suindex.rstNo sé si Sphinx tenía
autosummaryextensión en el momento en que se hizo la pregunta original, pero por ahora es bastante posible configurar una generación automática de ese tipo sin usarsphinx-apidocun script similar. A continuación hay configuraciones que funcionan para uno de mis proyectos.Habilite la
autosummaryextensión (así comoautodoc) en elconf.pyarchivo y configure suautosummary_generateopción enTrue. Esto puede ser suficiente si no está utilizando*.rstplantillas personalizadas . De lo contrario, agregue su directorio de plantillas para excluir la lista, oautosummaryintente tratarlos como archivos de entrada (lo que parece ser un error).Úselo
autosummary::en el árbol de TOC en suindex.rstarchivo. En este ejemplo, la documentación de los módulosproject.module1yproject.module2se generará automáticamente y se coloca en_autosummaryel directorio.Por defecto
autosummarygenerará solo resúmenes muy cortos para los módulos y sus funciones. Para cambiar eso, puede colocar un archivo de plantilla personalizado_templates/autosummary/module.rst(que se analizará con Jinja2 ):En conclusión, no hay necesidad de mantener el
_autosummarydirectorio bajo control de versiones. Además, puede nombrarlo como desee y colocarlo en cualquier lugar del árbol fuente (aunque ponerlo a continuación_buildno funcionará).fuente
En cada paquete, el
__init__.pyarchivo puede tener.. automodule:: package.modulecomponentes para cada parte del paquete.Entonces puedes
.. automodule:: packagey en su mayoría hace lo que quieres.fuente
__init__.pyarchivos en sus paquetes. La cadena de documentación puede incluir CUALQUIER directiva de documentación de Sphinx, incluidos los.. automodule::módulos del paquete.autodoces un error tipográfico, debería serloautomodule. pero muchas gracias por la pista!Desde la versión 3.1 de Sphinx (junio de 2020),
sphinx.ext.autosummary(¡finalmente!) Tiene recursividad.Por lo tanto, no es necesario codificar los nombres de los módulos ni confiar en bibliotecas de terceros como Sphinx AutoAPI o Sphinx AutoPackageSummary para su detección automática de paquetes.
Ejemplo de paquete de Python 3.7 para documentar ( ver código en Github y resultado en ReadTheDocs ):
conf.py:index.rst(nota nueva:recursive:opción):Esto es suficiente para resumir automáticamente cada módulo del paquete, por muy anidado que esté. Para cada módulo, resume cada atributo, función, clase y excepción en ese módulo.
Sin embargo, curiosamente, las
sphinx.ext.autosummaryplantillas predeterminadas no generan páginas de documentación separadas para cada atributo, función, clase y excepción, y se vinculan a ellas desde las tablas de resumen. Es posible extender las plantillas para hacer esto, como se muestra a continuación, pero no puedo entender por qué este no es el comportamiento predeterminado, seguramente eso es lo que la mayoría de la gente querría ... Lo he planteado como una solicitud de función .Tuve que copiar las plantillas predeterminadas localmente y luego agregarlas:
site-packages/sphinx/ext/autosummary/templates/autosummary/module.rstamytoolbox/doc/source/_templates/custom-module-template.rstsite-packages/sphinx/ext/autosummary/templates/autosummary/class.rstamytoolbox/doc/source/_templates/custom-class-template.rstEl gancho en
custom-module-template.rstestáindex.rstarriba, usando la:template:opción. (Elimine esa línea para ver qué sucede usando las plantillas predeterminadas de paquetes de sitio).custom-module-template.rst(líneas adicionales anotadas a la derecha):custom-class-template.rst(líneas adicionales anotadas a la derecha):fuente
Sphinx AutoAPI hace exactamente esto.
fuente
Quizás lo que estás buscando es Epydoc y esta extensión Sphinx .
fuente