Saya mencoba menggunakan Sphinx untuk mendokumentasikan proyek 5.000+ line dengan Python. Ini memiliki sekitar 7 modul dasar. Sejauh yang saya tahu, Untuk menggunakan autodoc saya perlu menulis kode seperti ini untuk setiap file dalam proyek saya:
.. automodule:: mods.set.tests
:members:
:show-inheritance:
Ini terlalu membosankan karena saya punya banyak file. Akan lebih mudah jika saya bisa menentukan bahwa saya ingin paket 'mods' didokumentasikan. Sphinx kemudian dapat secara rekursif menelusuri paket dan membuat halaman untuk setiap submodule.
Apakah ada fitur seperti ini? Jika tidak, saya bisa menulis skrip untuk membuat semua file .rst, tetapi itu akan memakan banyak waktu.
python
python-sphinx
autodoc
Cory Walker
sumber
sumber
ls
ke file dan mengeditnya?Jawaban:
Anda dapat memeriksa skrip yang saya buat ini. Saya pikir itu dapat membantu Anda.
Script ini mem-parsing pohon direktori mencari modul dan paket python dan membuat file REST tepat untuk membuat dokumentasi kode dengan Sphinx. Ini juga membuat indeks modul.
MEMPERBARUI
Skrip ini sekarang menjadi bagian dari Sphinx 1.1 sebagai apidoc .
sumber
sphinx-build -b html . ./_build
tidak mengambilnya.source directory
(. Dalam kasus Anda). Direktori _build adalah tempat file HTML akan dibuat. Periksa info lebih lanjut: sphinx.pocoo.org/tutorial.html#running-the-build.. include:: modules.rst
ke Andaindex.rst
Saya tidak tahu apakah Sphinx memiliki
autosummary
ekstensi pada saat pertanyaan awal diajukan, tetapi untuk saat ini sangat mungkin untuk membuat generasi otomatis semacam itu tanpa menggunakansphinx-apidoc
atau skrip serupa. Di bawah ini ada pengaturan yang berfungsi untuk salah satu proyek saya.Aktifkan
autosummary
ekstensi (dan jugaautodoc
) dalamconf.py
file dan setelautosummary_generate
opsi keTrue
. Ini mungkin cukup jika Anda tidak menggunakan*.rst
templat khusus . Jika tidak, tambahkan direktori templat Anda untuk mengecualikan daftar, atauautosummary
akan mencoba memperlakukannya sebagai file input (yang tampaknya merupakan bug).Gunakan
autosummary::
di pohon TOC dalamindex.rst
file Anda . Dalam contoh ini dokumentasi untuk modulproject.module1
danproject.module2
akan dihasilkan secara otomatis dan ditempatkan ke_autosummary
direktori.Secara default
autosummary
akan menghasilkan ringkasan yang sangat singkat untuk modul dan fungsinya. Untuk mengubahnya Anda dapat memasukkan file template khusus_templates/autosummary/module.rst
(yang akan diuraikan dengan Jinja2 ):Kesimpulannya, tidak perlu menyimpan
_autosummary
direktori di bawah kontrol versi. Juga, Anda dapat memberi nama apa pun yang Anda inginkan dan menempatkannya di mana saja di pohon sumber (meletakkannya di bawah_build
tidak akan berfungsi, meskipun).sumber
Di setiap paket,
__init__.py
file dapat memiliki.. automodule:: package.module
komponen untuk setiap bagian dari paket.Maka Anda bisa
.. automodule:: package
dan kebanyakan melakukan apa yang Anda inginkan.sumber
__init__.py
file dalam paket Anda. Docstring dapat mencakup arahan dokumentasi APAPUN Sphinx, termasuk.. automodule::
untuk modul dalam paket.autodoc
adalah kesalahan ketik, seharusnyaautomodule
. tapi terima kasih banyak atas petunjuknya!Dari Sphinx versi 3.1 (Juni 2020),
sphinx.ext.autosummary
(akhirnya!) Memiliki rekursi.Jadi tidak perlu nama kode modul keras atau mengandalkan perpustakaan pihak ke-3 seperti Sphinx AutoAPI atau Sphinx AutoPackageSummary untuk deteksi paket otomatis mereka lagi.
Paket contoh Python 3.7 untuk didokumentasikan ( lihat kode pada Github dan hasil pada ReadTheDocs ):
conf.py
:index.rst
(perhatikan:recursive:
opsi baru ):Ini cukup untuk secara otomatis merangkum setiap modul dalam paket, betapapun bersarangnya. Untuk setiap modul, modul ini merangkum setiap atribut, fungsi, kelas dan pengecualian dalam modul itu.
Anehnya,
sphinx.ext.autosummary
templat default tidak melanjutkan untuk menghasilkan halaman dokumentasi terpisah untuk setiap atribut, fungsi, kelas dan pengecualian, dan tautan ke mereka dari tabel ringkasan. Dimungkinkan untuk memperluas templat untuk melakukan ini, seperti yang ditunjukkan di bawah ini, tetapi saya tidak dapat memahami mengapa ini bukan perilaku default - tentu itu yang diinginkan kebanyakan orang ..? Saya telah mengangkatnya sebagai permintaan fitur .Saya harus menyalin template default secara lokal, dan kemudian menambahkannya:
site-packages/sphinx/ext/autosummary/templates/autosummary/module.rst
kemytoolbox/doc/source/_templates/custom-module-template.rst
site-packages/sphinx/ext/autosummary/templates/autosummary/class.rst
kemytoolbox/doc/source/_templates/custom-class-template.rst
Kait ke dalam
custom-module-template.rst
ada diindex.rst
atas, menggunakan:template:
opsi. (Hapus baris itu untuk melihat apa yang terjadi dengan menggunakan templat paket situs standar.)custom-module-template.rst
(baris tambahan dicatat di sebelah kanan):custom-class-template.rst
(baris tambahan dicatat di sebelah kanan):sumber
Sphinx AutoAPI melakukan hal ini.
sumber
Mungkin yang Anda cari adalah Epydoc dan ekstensi Sphinx ini .
sumber