Как документировать код Python с помощью Doxygen

Мне нравится, когда Doxygen создает документацию по коду C или PHP. У меня есть предстоящий проект Python, и я думаю, что помню, что Python не имеет комментариев /* .. */, а также имеет собственное средство самодокументирования, которое, похоже, является питоническим способом документирования.

Поскольку я знаком с Doxygen, как я могу использовать его для создания документации Python? Есть ли что-то конкретное, о чем мне нужно знать?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
97
0
123 395
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Это задокументировано на сайте doxygen, но подведем итог:

Вы можете использовать doxygen для документирования вашего кода Python. Вы можете использовать строковый синтаксис документации Python:

"""@package docstring
Documentation for this module.

More details.
"""

def func():
    """Documentation for a function.

    More details.
    """
    pass

В этом случае комментарии будут извлечены doxygen, но вы не сможете использовать какой-либо из специальные команды doxygen.

Или же вы можете (аналогично языкам C-стиля в doxygen) удвоить маркер комментария (#) в первой строке перед элементом:

## @package pyexample
#  Documentation for this module.
#
#  More details.

## Documentation for a function.
#
#  More details.
def func():
    pass

В этом случае вы можете использовать специальные команды doxygen. Нет определенного режима вывода Python, но вы, очевидно, можете улучшить результаты, установив OPTMIZE_OUTPUT_JAVA на YES.

Честно говоря, я немного удивлен разницей - похоже, что как только doxygen сможет обнаружить комментарии в блоках ## или блоках "" ", большая часть работы будет выполнена, и вы сможете использовать специальные команды в В любом случае. Может быть, они ожидают, что люди, использующие "" ", будут придерживаться большего количества методов документации Pythonic, и это будет мешать работе специальных команд doxygen?

Комментарии как документация в Python - это плохо. Комментарии предназначены для сопровождающего модуля (почему и как реализованы). Вся документация должна быть в строках документации (как использовать).

jfs 14.09.2008 01:20

Python вставляет комментарии и использует их как строки документации, поэтому оба формата работают с pydoc.

docwhat 03.02.2011 19:47

Взгляните на доксипия, который позволяет использовать специальные команды внутри обычных строк документации.

Mauro 27.10.2011 07:48

Другой очень хороший инструмент для документирования - сфинкс. Он будет использоваться в грядущем Python 2.6 документация, а также в джанго и многих других проектах Python.

С сайта сфинкса:

  • Форматы вывода: HTML (включая Windows HTML Help) и LaTeX, для версий PDF для печати
  • Обширные перекрестные ссылки: семантическая разметка и автоматические ссылки для функций, классов, терминов глоссария и аналогичной информации
  • Иерархическая структура: простое определение дерева документа с автоматическими ссылками на братьев и сестер, родителей и детей
  • Автоматические индексы: общий индекс, а также индекс модуля
  • Обработка кода: автоматическое выделение с помощью маркера Pygments
  • Расширения: автоматическое тестирование фрагментов кода, включение строк документации из модулей Python и т. д.

Пробовали. Хотя sphinx сам по себе является очень интересным инструментом, я не ожидал этого от doxygen. Doxygen - это больше инструмент для действительно хорошей документации для конечных клиентов, он намного лучше для дизайнера программного обеспечения, который просто хотел бы увидеть обзор API в удобном формате для печати.

Zane 02.06.2014 19:27

@Zane Я согласен. Как любитель Doxygen, я слишком упустил возможность создания полностью автоматического справочника по API. Проверьте мой ответ, так как теперь доступен другой вариант.

Havok 13.02.2016 11:26

Sphinx - это в основном инструмент для форматирования документов, написанных независимо от исходного кода, насколько я понимаю.

Для создания документации API из строк документации Python ведущими инструментами являются pdoc и пидоктор. Вот сгенерированные pydoctor документы API для Скрученный и Базар.

Конечно, если вы просто хотите взглянуть на строки документации, пока вы работаете над чем-то, есть инструмент командной строки «Pydoc», а также функция help(), доступная в интерактивном интерпретаторе.

Это правда, что sphinx использует в качестве основы документы, написанные независимо от исходного кода, но с помощью расширения autodoc можно легко включать строки документации из модулей python. Из-за его динамического характера я считаю рукописную документацию для модулей Python более полезной, чем сгенерированные документы api.

Peter Hoffmann 13.09.2008 11:22

«Рукописные» документы недоступны, когда вы пытаетесь разобраться в структуре и отношениях между классами в каком-то плохо документированном проекте.

Ярослав Рахматуллин 28.06.2013 23:21

pdoc используется однострочником командной строки (без других файлов конфигурации) и мне кажется совершенно нормальным. Мы генерируем документацию для Python с помощью pdoc при создании проектов на CI.

kaiser 26.01.2021 10:10

Входной фильтр доксипия позволяет использовать практически все теги форматирования Doxygen в стандартном формате строки документации Python. Я использую его для документирования большого смешанного фреймворка игровых приложений C++ и Python, и он хорошо работает.

Печально, что этот ответ, являющийся правильным для вопроса, также находится внизу :(

Dave Lasley 16.12.2014 02:42

Вы также можете проверить доксипипия, поскольку он преобразует строки документации Pythonic во что-то, что может использовать Doxygen.

Feneric 08.07.2016 21:38

Doxypy, кажется, мертв и ушел ...

naught101 03.12.2018 03:39

В конце концов, у вас есть только два варианта:

Вы создаете свой контент, используя Doxygen, или вы создаете свой контент, используя Sphinx *.

  1. Doxygen: это не лучший инструмент для большинства проектов Python. Но если вам приходится иметь дело с другими связанными проектами, написанными на C или C++, это может иметь смысл. Для этого вы можете улучшить интеграцию между Doxygen и Python с помощью доксипипия.

  2. Сфинкс: инструмент де-факто для документирования проекта Python. Здесь у вас есть три варианта: ручной, полуавтоматический (создание заглушек) и полностью автоматический (как у Doxygen).

    1. Для ручной документации API у вас есть Sphinx автодок. Прекрасно написать руководство пользователя со встроенными элементами, сгенерированными API.
    2. Для полуавтомата у вас есть Sphinx автосводка. Вы можете настроить свою систему сборки на вызов sphinx-autogen или настроить свой Sphinx с конфигурацией autosummary_generate. Вам потребуется настроить страницу с автосводками, а затем вручную отредактировать страницы. У вас есть варианты, но мой опыт использования этого подхода заключается в том, что он требует слишком большой настройки, и в конце, даже после создания новых шаблонов, я обнаружил ошибки и невозможность точно определить, что было представлено как общедоступный API, а что нет. Я считаю, что этот инструмент хорош для создания заглушек, которые потребуют ручного редактирования и не более того. Похоже на ярлык для перехода в руководство.
    3. Полностью автоматический. Это неоднократно подвергалось критике, и долгое время у нас не было хорошего полностью автоматического генератора Python API, интегрированного со Sphinx, пока не появился AutoAPI, который является новичком в этом блоке. Это, безусловно, лучший вариант для автоматической генерации API в Python (примечание: бессовестная самореклама).

Есть и другие варианты, на которые стоит обратить внимание:

  • Дышать: это началось как очень хорошая идея и имеет смысл, когда вы работаете с несколькими связанными проектами на других языках, которые используют Doxygen. Идея состоит в том, чтобы использовать вывод Doxygen XML и передать его Sphinx для создания вашего API. Таким образом, вы можете сохранить все достоинства Doxygen и унифицировать систему документации в Sphinx. Потрясающе в теории. На практике, когда я последний раз проверял, проект не готов к производству.
  • пидоктор *: Очень конкретно. Создает собственный вывод. Он имеет базовую интеграцию со Sphinx и несколько приятных функций.

Какая команда использовать autoapi. Я изменил conf.py, чтобы включить модули autoapi. В настоящее время я запускаю sphinx-apidoc -o apidocs --full.

Sandeep 16.02.2017 04:01

Вам не нужна дополнительная команда. Просто создайте свою документацию по Sphinx с помощью sphinx-build. Я интегрировал его с Tox вот так: github.com/HPENetworking/cookiecutter_python/blob/module/…

Havok 20.02.2017 10:47

@Havok Я не понимаю, насколько AutoAPI "полностью автоматический", когда мне нужно явно поместить все элементы модуля в переменную __all__.

buhtz says get vaccinated 02.10.2018 00:06

Doxygen - это генератор документации для C++, для Sphinx генерация кода - это просто опция, основная цель Sphinx - написать документацию. Интеграция с Python далека от интеграции с C++. Например, 1 всю строку документации python проекта необходимо переписать с помощью определенных тегов, если вы хотите использовать их в doxygen. например 2 doxygen.nl/manual/diagrams.html «Doxygen имеет встроенную поддержку для создания диаграмм наследования для классов C++». но не для Python, тем более для вызовов функций.

user3313834 01.03.2021 13:40

Другие вопросы по теме