Ich versuche, mit Sphinx ein Projekt mit mehr als 5.000 Zeilen in Python zu dokumentieren. Es hat ungefähr 7 Basismodule. Soweit ich weiß, muss ich für die Verwendung von Autodoc für jede Datei in meinem Projekt folgenden Code schreiben:
.. automodule:: mods.set.tests
:members:
:show-inheritance:
Das ist viel zu langweilig, weil ich viele Dateien habe. Es wäre viel einfacher, wenn ich nur angeben könnte, dass das 'Mods'-Paket dokumentiert werden soll. Sphinx könnte dann rekursiv das Paket durchgehen und eine Seite für jedes Submodul erstellen.
Gibt es eine solche Funktion? Wenn nicht, könnte ich ein Skript schreiben, um alle ersten Dateien zu erstellen, aber das würde viel Zeit in Anspruch nehmen.
python
python-sphinx
autodoc
Cory Walker
quelle
quelle
ls
zu einer Datei zu routen und diese zu bearbeiten?Antworten:
Sie können dieses Skript überprüfen , das ich erstellt habe. Ich denke, es kann dir helfen.
Dieses Skript analysiert einen Verzeichnisbaum, der nach Python-Modulen und -Paketen sucht, und erstellt ReST-Dateien entsprechend, um eine Codedokumentation mit Sphinx zu erstellen. Außerdem wird ein Modulindex erstellt.
AKTUALISIEREN
Dieses Skript ist jetzt Teil von Sphinx 1.1 als Apidoc .
quelle
sphinx-build -b html . ./_build
sie nicht erfasst .source directory
(. In Ihrem Fall) setzen. Im Verzeichnis _build werden die HTML-Dateien erstellt. Überprüfen Sie für weitere Informationen: sphinx.pocoo.org/tutorial.html#running-the-build.. include:: modules.rst
zu Ihremindex.rst
Ich weiß nicht, ob Sphinx
autosummary
zum Zeitpunkt der ursprünglichen Frage eine Erweiterung hatte, aber im Moment ist es durchaus möglich, eine solche automatische Generierung ohne Verwendung einessphinx-apidoc
ähnlichen Skripts einzurichten . Unten finden Sie Einstellungen, die für eines meiner Projekte funktionieren.Aktivieren Sie die
autosummary
Erweiterung (sowieautodoc
) in derconf.py
Datei und setzen Sie dieautosummary_generate
Option aufTrue
. Dies kann ausreichen, wenn Sie keine benutzerdefinierten*.rst
Vorlagen verwenden. Fügen Sie andernfalls Ihr Vorlagenverzeichnis hinzu, um die Liste auszuschließen, oderautosummary
versuchen Sie, sie als Eingabedateien zu behandeln (was ein Fehler zu sein scheint).Verwendung
autosummary::
im Inhaltsverzeichnisbaum in Ihrerindex.rst
Datei. In diesem Beispiel Dokumentation für Moduleproject.module1
undproject.module2
wird automatisch generiert und in platziert_autosummary
Verzeichnis.Standardmäßig
autosummary
werden nur sehr kurze Zusammenfassungen für Module und ihre Funktionen generiert. Um dies zu ändern, können Sie eine benutzerdefinierte Vorlagendatei einfügen_templates/autosummary/module.rst
(die mit Jinja2 analysiert wird ):Zusammenfassend ist es nicht erforderlich, das
_autosummary
Verzeichnis unter Versionskontrolle zu halten . Sie können es auch beliebig benennen und an einer beliebigen Stelle im Quellbaum platzieren (das Platzieren unten_build
funktioniert jedoch nicht).quelle
In jedem Paket kann die
__init__.py
Datei.. automodule:: package.module
Komponenten für jeden Teil des Pakets enthalten.Dann können Sie
.. automodule:: package
und es macht meistens, was Sie wollen.quelle
__init__.py
Dateien in Ihren Paketen ein. Die Dokumentzeichenfolge kann JEDE Sphinx-Dokumentationsanweisung enthalten, auch.. automodule::
für Module im Paket.autodoc
ist ein Tippfehler, sollte es seinautomodule
. aber vielen dank für den hinweis!Ab Sphinx Version 3.1 (Juni 2020) hat
sphinx.ext.autosummary
(endlich!) Rekursion.Sie müssen also keine Modulnamen mehr fest codieren oder sich für die automatische Paketerkennung auf Bibliotheken von Drittanbietern wie Sphinx AutoAPI oder Sphinx AutoPackageSummary verlassen .
Beispiel für ein zu dokumentierendes Python 3.7-Paket ( siehe Code in Github und Ergebnis in ReadTheDocs ):
conf.py
::index.rst
(Neue:recursive:
Option beachten ):Dies reicht aus, um jedes Modul im Paket automatisch zusammenzufassen, auch wenn es tief verschachtelt ist. Für jedes Modul werden dann alle Attribute, Funktionen, Klassen und Ausnahmen in diesem Modul zusammengefasst.
Seltsamerweise
sphinx.ext.autosummary
generieren die Standardvorlagen jedoch keine separaten Dokumentationsseiten für jedes Attribut, jede Funktion, jede Klasse und jede Ausnahme und verknüpfen sie aus den Übersichtstabellen. Es ist möglich, die Vorlagen zu erweitern, um dies zu tun, wie unten gezeigt, aber ich kann nicht verstehen, warum dies nicht das Standardverhalten ist - sicherlich ist es das, was die meisten Leute wollen würden ..? Ich habe es als Feature-Anfrage angesprochen .Ich musste die Standardvorlagen lokal kopieren und dann hinzufügen:
site-packages/sphinx/ext/autosummary/templates/autosummary/module.rst
nachmytoolbox/doc/source/_templates/custom-module-template.rst
site-packages/sphinx/ext/autosummary/templates/autosummary/class.rst
nachmytoolbox/doc/source/_templates/custom-class-template.rst
Der Haken in
custom-module-template.rst
istindex.rst
oben mit der:template:
Option. (Löschen Sie diese Zeile, um zu sehen, was mit den Standardvorlagen für Site-Pakete geschieht.)custom-module-template.rst
(zusätzliche Zeilen rechts):custom-class-template.rst
(zusätzliche Zeilen rechts):quelle
Sphinx AutoAPI macht genau das.
quelle
Vielleicht suchen Sie nach Epydoc und dieser Sphinx-Erweiterung .
quelle