Próbuję użyć Sphinx do udokumentowania ponad 5000 liniowego projektu w Pythonie. Posiada około 7 modułów bazowych. O ile wiem, aby korzystać z autodoc, muszę napisać taki kod dla każdego pliku w moim projekcie:
.. automodule:: mods.set.tests
:members:
:show-inheritance:
Jest to zbyt uciążliwe, ponieważ mam wiele plików. Byłoby znacznie łatwiej, gdybym mógł po prostu określić, że chcę, aby pakiet „modów” był udokumentowany. Sphinx mógłby wówczas rekurencyjnie przejrzeć pakiet i utworzyć stronę dla każdego modułu podrzędnego.
Czy jest taka funkcja? Gdyby nie to, mógłbym napisać skrypt, który utworzyłby wszystkie pliki .rst, ale zajęłoby to dużo czasu.
python
python-sphinx
autodoc
Cory Walker
źródło
źródło
ls
do pliku i jego edycja?Odpowiedzi:
Możesz sprawdzić ten skrypt , który zrobiłem. Myślę, że to może ci pomóc.
Ten skrypt analizuje drzewo katalogów w poszukiwaniu modułów i pakietów Pythona i tworzy pliki ReST odpowiednio do tworzenia dokumentacji kodu za pomocą Sphinx. Tworzy również indeks modułów.
AKTUALIZACJA
Ten skrypt jest teraz częścią Sphinx 1.1 jako apidoc .
źródło
sphinx-build -b html . ./_build
ich nie podnosi.source directory
(. W twoim przypadku). Katalog _build to miejsce, w którym zostaną utworzone pliki HTML. Sprawdź więcej informacji: sphinx.pocoo.org/tutorial.html#running-the-build.. include:: modules.rst
do swojegoindex.rst
Nie wiem, czy Sphinx miał
autosummary
rozszerzenie w momencie zadawania pierwotnego pytania, ale na razie jest całkiem możliwe, aby ustawić automatyczne generowanie tego rodzaju bez użyciasphinx-apidoc
lub podobnego skryptu. Poniżej znajdują się ustawienia, które działają dla jednego z moich projektów.Włącz
autosummary
rozszerzenie (a takżeautodoc
) wconf.py
pliku i ustaw jegoautosummary_generate
opcję naTrue
. To może wystarczyć, jeśli nie używasz niestandardowych*.rst
szablonów. W przeciwnym razie dodaj katalog szablonów do listy wykluczeń, lubautosummary
spróbuje traktować je jako pliki wejściowe (co wydaje się być błędem).Użyj
autosummary::
w drzewie spisu treści windex.rst
pliku. W tym przykładzie dokumentacja modułówproject.module1
iproject.module2
zostanie wygenerowana automatycznie i umieszczona w_autosummary
katalogu.Domyślnie
autosummary
generuje tylko bardzo krótkie podsumowania modułów i ich funkcji. Aby to zmienić, możesz umieścić plik szablonu niestandardowego w_templates/autosummary/module.rst
(który zostanie przeanalizowany za pomocą Jinja2 ):Podsumowując, nie ma potrzeby utrzymywania
_autosummary
katalogu pod kontrolą wersji. Możesz także nazwać go dowolnie i umieścić w dowolnym miejscu w drzewie źródłowym (umieszczenie go poniżej_build
nie zadziała).źródło
W każdym pakiecie
__init__.py
plik może zawierać.. automodule:: package.module
komponenty dla każdej części pakietu.Wtedy możesz
.. automodule:: package
i robi to, co chcesz.źródło
__init__.py
pliki w twoich pakietach. Dokumentacja może zawierać DOWOLNE dyrektywy dokumentacji Sphinx, w tym.. automodule::
dla modułów w pakiecie.autodoc
to literówka, a powinnoautomodule
. ale wielkie dzięki za podpowiedź!Od wersji 3.1 Sphinx (czerwiec 2020)
sphinx.ext.autosummary
(w końcu!) Ma rekursję.Nie trzeba więc już na stałe kodować nazw modułów ani polegać na bibliotekach innych firm, takich jak Sphinx AutoAPI lub Sphinx AutoPackageSummary do automatycznego wykrywania pakietów.
Przykładowy pakiet Pythona 3.7 do udokumentowania ( zobacz kod na Github i wynik w ReadTheDocs ):
conf.py
:index.rst
(uwaga na nową:recursive:
opcję):To wystarczy, aby automatycznie podsumować każdy moduł w pakiecie, nawet jeśli jest głęboko zagnieżdżony. Dla każdego modułu podsumowuje następnie każdy atrybut, funkcję, klasę i wyjątek w tym module.
Co dziwne, domyślne
sphinx.ext.autosummary
szablony nie generują oddzielnych stron dokumentacji dla każdego atrybutu, funkcji, klasy i wyjątku oraz nie zawierają linków do nich z tabel podsumowań. Możliwe jest rozszerzenie szablonów, aby to zrobić, jak pokazano poniżej, ale nie mogę zrozumieć, dlaczego nie jest to domyślne zachowanie - z pewnością tego chciałaby większość ludzi ...? Podniosłem to jako prośbę o funkcję .Musiałem lokalnie skopiować domyślne szablony, a następnie dodać do nich:
site-packages/sphinx/ext/autosummary/templates/autosummary/module.rst
domytoolbox/doc/source/_templates/custom-module-template.rst
site-packages/sphinx/ext/autosummary/templates/autosummary/class.rst
domytoolbox/doc/source/_templates/custom-class-template.rst
Hak do
custom-module-template.rst
znajduje sięindex.rst
powyżej, korzystając z:template:
opcji. (Usuń ten wiersz, aby zobaczyć, co się dzieje przy użyciu domyślnych szablonów pakietów witryn).custom-module-template.rst
(dodatkowe linie zaznaczone po prawej stronie):custom-class-template.rst
(dodatkowe linie zaznaczone po prawej stronie):źródło
Sphinx AutoAPI robi dokładnie to.
źródło
Może to, czego szukasz, to Epydoc i to rozszerzenie Sphinx .
źródło