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






Это задокументировано на сайте 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 вставляет комментарии и использует их как строки документации, поэтому оба формата работают с pydoc.
Взгляните на доксипия, который позволяет использовать специальные команды внутри обычных строк документации.
Другой очень хороший инструмент для документирования - сфинкс. Он будет использоваться в грядущем Python 2.6 документация, а также в джанго и многих других проектах Python.
С сайта сфинкса:
Пробовали. Хотя sphinx сам по себе является очень интересным инструментом, я не ожидал этого от doxygen. Doxygen - это больше инструмент для действительно хорошей документации для конечных клиентов, он намного лучше для дизайнера программного обеспечения, который просто хотел бы увидеть обзор API в удобном формате для печати.
@Zane Я согласен. Как любитель Doxygen, я слишком упустил возможность создания полностью автоматического справочника по API. Проверьте мой ответ, так как теперь доступен другой вариант.
Sphinx - это в основном инструмент для форматирования документов, написанных независимо от исходного кода, насколько я понимаю.
Для создания документации API из строк документации Python ведущими инструментами являются pdoc и пидоктор. Вот сгенерированные pydoctor документы API для Скрученный и Базар.
Конечно, если вы просто хотите взглянуть на строки документации, пока вы работаете над чем-то, есть инструмент командной строки «Pydoc», а также функция help(), доступная в интерактивном интерпретаторе.
Это правда, что sphinx использует в качестве основы документы, написанные независимо от исходного кода, но с помощью расширения autodoc можно легко включать строки документации из модулей python. Из-за его динамического характера я считаю рукописную документацию для модулей Python более полезной, чем сгенерированные документы api.
«Рукописные» документы недоступны, когда вы пытаетесь разобраться в структуре и отношениях между классами в каком-то плохо документированном проекте.
pdoc используется однострочником командной строки (без других файлов конфигурации) и мне кажется совершенно нормальным. Мы генерируем документацию для Python с помощью pdoc при создании проектов на CI.
Входной фильтр доксипия позволяет использовать практически все теги форматирования Doxygen в стандартном формате строки документации Python. Я использую его для документирования большого смешанного фреймворка игровых приложений C++ и Python, и он хорошо работает.
Печально, что этот ответ, являющийся правильным для вопроса, также находится внизу :(
Вы также можете проверить доксипипия, поскольку он преобразует строки документации Pythonic во что-то, что может использовать Doxygen.
Doxypy, кажется, мертв и ушел ...
В конце концов, у вас есть только два варианта:
Вы создаете свой контент, используя Doxygen, или вы создаете свой контент, используя Sphinx *.
Doxygen: это не лучший инструмент для большинства проектов Python. Но если вам приходится иметь дело с другими связанными проектами, написанными на C или C++, это может иметь смысл. Для этого вы можете улучшить интеграцию между Doxygen и Python с помощью доксипипия.
Сфинкс: инструмент де-факто для документирования проекта Python. Здесь у вас есть три варианта: ручной, полуавтоматический (создание заглушек) и полностью автоматический (как у Doxygen).
autosummary_generate. Вам потребуется настроить страницу с автосводками, а затем вручную отредактировать страницы. У вас есть варианты, но мой опыт использования этого подхода заключается в том, что он требует слишком большой настройки, и в конце, даже после создания новых шаблонов, я обнаружил ошибки и невозможность точно определить, что было представлено как общедоступный API, а что нет. Я считаю, что этот инструмент хорош для создания заглушек, которые потребуют ручного редактирования и не более того. Похоже на ярлык для перехода в руководство.Есть и другие варианты, на которые стоит обратить внимание:
Какая команда использовать autoapi. Я изменил conf.py, чтобы включить модули autoapi. В настоящее время я запускаю sphinx-apidoc -o apidocs --full.
Вам не нужна дополнительная команда. Просто создайте свою документацию по Sphinx с помощью sphinx-build. Я интегрировал его с Tox вот так: github.com/HPENetworking/cookiecutter_python/blob/module/…
@Havok Я не понимаю, насколько AutoAPI "полностью автоматический", когда мне нужно явно поместить все элементы модуля в переменную __all__.
Doxygen - это генератор документации для C++, для Sphinx генерация кода - это просто опция, основная цель Sphinx - написать документацию. Интеграция с Python далека от интеграции с C++. Например, 1 всю строку документации python проекта необходимо переписать с помощью определенных тегов, если вы хотите использовать их в doxygen. например 2 doxygen.nl/manual/diagrams.html «Doxygen имеет встроенную поддержку для создания диаграмм наследования для классов C++». но не для Python, тем более для вызовов функций.
Комментарии как документация в Python - это плохо. Комментарии предназначены для сопровождающего модуля (почему и как реализованы). Вся документация должна быть в строках документации (как использовать).