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
ls
a 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 . ./_build
no 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.rst
a suindex.rst
No sé si Sphinx tenía
autosummary
extensió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-apidoc
un script similar. A continuación hay configuraciones que funcionan para uno de mis proyectos.Habilite la
autosummary
extensión (así comoautodoc
) en elconf.py
archivo y configure suautosummary_generate
opción enTrue
. Esto puede ser suficiente si no está utilizando*.rst
plantillas personalizadas . De lo contrario, agregue su directorio de plantillas para excluir la lista, oautosummary
intente tratarlos como archivos de entrada (lo que parece ser un error).Úselo
autosummary::
en el árbol de TOC en suindex.rst
archivo. En este ejemplo, la documentación de los módulosproject.module1
yproject.module2
se generará automáticamente y se coloca en_autosummary
el directorio.Por defecto
autosummary
generará 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
_autosummary
directorio bajo control de versiones. Además, puede nombrarlo como desee y colocarlo en cualquier lugar del árbol fuente (aunque ponerlo a continuación_build
no funcionará).fuente
En cada paquete, el
__init__.py
archivo puede tener.. automodule:: package.module
componentes para cada parte del paquete.Entonces puedes
.. automodule:: package
y en su mayoría hace lo que quieres.fuente
__init__.py
archivos en sus paquetes. La cadena de documentación puede incluir CUALQUIER directiva de documentación de Sphinx, incluidos los.. automodule::
módulos del paquete.autodoc
es 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.autosummary
plantillas 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.rst
amytoolbox/doc/source/_templates/custom-module-template.rst
site-packages/sphinx/ext/autosummary/templates/autosummary/class.rst
amytoolbox/doc/source/_templates/custom-class-template.rst
El gancho en
custom-module-template.rst
estáindex.rst
arriba, 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