Сфинкс, лучшие практики
Я только начал использовать инструмент Sphinx для создания документации для моего кода. Но я немного смущен, потому что это не так просто, как я ожидал. Я создаю документ Sphinx, используя:
sphinx-quickstart
а затем создаю файлы *.rst в папку "source". Похоже, мне нужно создать *.rst файл для каждого модуля, для которого я хочу создать документ. Для test.py я создаю test.rst. Внутри test.rst у меня есть:
.. automodule:: test
:members:
:show-inheritance:
Затем внутри test.py у меня есть:
"""
.. module:: test
:platform: Unix, Windows
:synopsis: A useful module indeed.
"""
Затем я создаю документацию, используя:
sphinx-build -b html source/ build/
Все работает так, как ожидалось, но проблема в том, что это не так просто, как я ожидал. Я предполагаю, что должен быть более простой способ сделать это, пропустив некоторые из этих шагов. Интересно, есть ли способ генерировать документацию для всех модулей внутри пакета вместо создания файла *.rst для каждого модуля.
Спасибо.
Ответы
Ответ 1
Нет более простого способа. Sphinx не является генератором документов API, подобным epydoc, но вместо этого фокусируется на рукописной документации. Следовательно, вам нужно написать много документов вручную.
Преимущество состоит в том, что вы также можете писать документацию за пределами документации API (например, учебники, руководства по использованию, даже документацию для конечных пользователей) и что вы можете структурировать документацию API логически, помимо простого простого алфавитного списка доступных объектов. Такая документация, как правило, намного легче понять и намного проще в использовании, если все сделано правильно.
Взгляните на документацию по хорошо известным проектам (например, Werkzeug или Sphinx), чтобы увидеть некоторые рекомендации.
Ответ 2
Один простой способ быстро документировать ваше приложение - просто написать docstrings в классы и методы в соответствии с обычным, а затем дополнить их, если это необходимо в файлах .rst.
template.rst:
Templating
----------
Notes about templating would go here.
.. automodule:: myapp.lib.template
:members:
:undoc-members:
.. py:attribute:: filepath
Full path to template file. This attribute is added in runtime, so
it has to be documented manually.
MyApp/Library/template.py:
class Template(object):
'''
Class for rendering templates.
Usage example::
>>> t = Template('somefile')
>>> document = t.render(variables={'ID': 1234})
Rendered document is always returned as a unicode string.
'''
def render(self, **args):
'''
Render template. Keyword arguments are passed `as-is` to renderer.
'''
Ответ 3
Вы можете использовать sphinx-apidoc
для создания файлов rst
для вас.
sphinx-apidoc -o outputdir pythondir
Пример выполнения вывода:
% sphinx-apidoc -o source/ ../
File source/module1.rst already exists, skipping.
File source/module2.rst already exists, skipping.
Creating file source/module3.rst.
rst docs updated in source/.
sphinx-apidoc не будет изменять существующие файлы, вы можете принудительно перезаписать флаг -f
.