J'essaie d'utiliser Sphinx pour documenter un projet de plus de 5000 lignes en Python. Il a environ 7 modules de base. Pour autant que je sache, pour utiliser autodoc, je dois écrire un code comme celui-ci pour chaque fichier de mon projet:
.. automodule:: mods.set.tests
:members:
:show-inheritance:
C'est beaucoup trop fastidieux car j'ai de nombreux fichiers. Ce serait beaucoup plus facile si je pouvais simplement spécifier que je voulais que le paquet 'mods' soit documenté. Sphinx pourrait alors parcourir récursivement le package et créer une page pour chaque sous-module.
Existe-t-il une fonctionnalité comme celle-ci? Sinon, je pourrais écrire un script pour créer tous les fichiers .rst, mais cela prendrait beaucoup de temps.
python
python-sphinx
autodoc
Cory Walker
la source
la source
ls
vers un fichier et de le modifier?Réponses:
Vous pouvez vérifier ce script que j'ai créé. Je pense que cela peut vous aider.
Ce script analyse une arborescence de répertoires à la recherche de modules et de packages python et crée des fichiers ReST de manière appropriée pour créer une documentation de code avec Sphinx. Il crée également un index des modules.
METTRE À JOUR
Ce script fait maintenant partie de Sphinx 1.1 car qu'apidoc .
la source
sphinx-build -b html . ./_build
ne les récupère pas.source directory
(. Dans votre cas). Le répertoire _build est l'endroit où les fichiers HTML seront créés. Vérifiez pour plus d'informations: sphinx.pocoo.org/tutorial.html#running-the-build.. include:: modules.rst
à votreindex.rst
Je ne sais pas si Sphinx avait eu une
autosummary
extension au moment où la question initiale a été posée, mais pour l'instant, il est tout à fait possible de configurer une génération automatique de ce type sans utilisersphinx-apidoc
ou script similaire. Ci-dessous, il y a des paramètres qui fonctionnent pour l'un de mes projets.Activez l'
autosummary
extension (ainsi queautodoc
) dans leconf.py
fichier et définissez sonautosummary_generate
option surTrue
. Cela peut suffire si vous n'utilisez pas de*.rst
modèles personnalisés . Sinon, ajoutez votre répertoire de modèles à la liste d'exclusion, ouautosummary
essayez de les traiter comme des fichiers d'entrée (ce qui semble être un bogue).Utilisez
autosummary::
dans l'arborescence de la table des matières dans votreindex.rst
fichier. Dans cet exemple de documentation pour les modulesproject.module1
etproject.module2
sera généré automatiquement et placé dans le_autosummary
répertoire.Par défaut,
autosummary
ne générera que des résumés très courts pour les modules et leurs fonctions. Pour changer cela, vous pouvez insérer un fichier de modèle personnalisé dans_templates/autosummary/module.rst
(qui sera analysé avec Jinja2 ):En conclusion, il n'est pas nécessaire de garder le
_autosummary
répertoire sous contrôle de version. De plus, vous pouvez le nommer comme vous le souhaitez et le placer n'importe où dans l'arborescence des sources (le placer ci-dessous_build
ne fonctionnera cependant pas).la source
Dans chaque package, le
__init__.py
fichier peut avoir des.. automodule:: package.module
composants pour chaque partie du package.Ensuite, vous pouvez
.. automodule:: package
et il fait principalement ce que vous voulez.la source
__init__.py
fichiers de vos packages. La docstring peut inclure TOUTES les directives de documentation Sphinx, y compris.. automodule::
pour les modules du package.autodoc
est une faute de frappe, ça devrait êtreautomodule
. mais merci beaucoup pour l'indice!À partir de la version 3.1 de Sphinx (juin 2020),
sphinx.ext.autosummary
(enfin!) A la récursivité.Donc pas besoin de coder en dur les noms de modules ou de s'appuyer sur des bibliothèques tierces comme Sphinx AutoAPI ou Sphinx AutoPackage pour leur détection automatique des paquets.
Exemple de package Python 3.7 à documenter ( voir le code sur Github et le résultat sur ReadTheDocs ):
conf.py
:index.rst
(notez la nouvelle:recursive:
option):Cela suffit pour résumer automatiquement chaque module du package, même profondément imbriqué. Pour chaque module, il récapitule ensuite chaque attribut, fonction, classe et exception de ce module.
Curieusement, cependant, les
sphinx.ext.autosummary
modèles par défaut ne génèrent pas de pages de documentation séparées pour chaque attribut, fonction, classe et exception, et établissent des liens vers eux à partir des tableaux récapitulatifs. Il est possible d'étendre les modèles pour ce faire, comme indiqué ci-dessous, mais je ne comprends pas pourquoi ce n'est pas le comportement par défaut - c'est sûrement ce que la plupart des gens voudraient ..? Je l'ai soulevé comme une demande de fonctionnalité .J'ai dû copier les modèles par défaut localement, puis y ajouter:
site-packages/sphinx/ext/autosummary/templates/autosummary/module.rst
versmytoolbox/doc/source/_templates/custom-module-template.rst
site-packages/sphinx/ext/autosummary/templates/autosummary/class.rst
versmytoolbox/doc/source/_templates/custom-class-template.rst
Le crochet dans
custom-module-template.rst
est enindex.rst
dessus, en utilisant l':template:
option. (Supprimez cette ligne pour voir ce qui se passe en utilisant les modèles de packages de site par défaut.)custom-module-template.rst
(lignes supplémentaires notées à droite):custom-class-template.rst
(lignes supplémentaires notées à droite):la source
C'est exactement ce que fait Sphinx AutoAPI .
la source
Peut-être que vous recherchez Epydoc et cette extension Sphinx .
la source