Як задокументувати код Python за допомогою Doxygen [закрито]


94

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

Оскільки я знайомий з Doxygen, як я можу використовувати його для створення своєї документації на Python? Чи є щось конкретне, про що мені слід знати?

Відповіді:


62

Це задокументовано на веб-сайті про кисень , але підсумовуючи тут:

Ви можете використовувати доксиген для документування вашого коду Python. Ви можете використовувати синтаксис рядка документації Python:

"""@package docstring
Documentation for this module.

More details.
"""

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

    More details.
    """
    pass

У цьому випадку коментарі будуть вилучені киснем, але ви не зможете використовувати жодну спеціальну команду доксигену .

Або ви можете (подібно до мов у стилі С під doxygen) подвоїти маркер коментаря ( #) у першому рядку перед учасником:

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

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

У цьому випадку ви можете використовувати спеціальні команди доксигену. Немає особливого режиму виводу Python, але ви можете, мабуть, покращити результати, встановивши OPTMIZE_OUTPUT_JAVAна YES.

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


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

4
Python буде втягувати коментарі та використовувати їх як текстові рядки, тому обидва формати працюють з pydoc.
docwhat

10
Погляньте на doxypy, який дає змогу використовувати спеціальні команди в звичайних документальних рядках.
Mauro

82

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


2
Сумно, що ця відповідь, будучи правильною для запитання, також є внизу :(
Dave Lasley

9
Можливо, ви також захочете перевірити doxypypy, оскільки він перетворить Pythonic-документи в те, що Doxygen може використовувати.
Фенерик

8
Доксіпі, здається, мертвий і зник ..
naught101

23

Зрештою, у вас є лише два варіанти:

Ви генеруєте вміст за допомогою Doxygen або генеруєте вміст за допомогою програми Sphinx *.

  1. Кисень : це не інструмент вибору для більшості проектів Python. Але якщо вам доводиться мати справу з іншими суміжними проектами, написаними на C або C ++, це може мати сенс. Для цього ви можете покращити інтеграцію між Doxygen та Python, використовуючи doxypypy .

  2. Sphinx : інструмент дефакто для документування проекту Python. Тут у вас є три варіанти: ручний, напівавтоматичний (генерація заглушок) і повністю автоматичний (як кисень).

    1. Для ручної документації API ви маєте Sphinx autodoc . Це чудово, щоб написати керівництво користувача із вбудованими елементами, згенерованими API.
    2. У напівавтоматичному режимі у вас є автозвіт " Сфінкс" . Ви можете або налаштувати свою систему побудови на виклик сфінкса-автогену, або налаштувати свій Сфінкс за допомогою autosummary_generateконфігурації. Вам потрібно буде налаштувати сторінку з автозведеннями, а потім вручну відредагувати сторінки. У вас є варіанти, але мій досвід з таким підходом полягає в тому, що він вимагає занадто багато конфігурації, і зрештою, навіть після створення нових шаблонів, я виявив помилки та неможливість точно визначити, що було виставлено як загальнодоступний API, а що ні. На мою думку, цей інструмент підходить для генерації заглушок, що вимагатиме ручного редагування, і не більше того. Це як ярлик, щоб закінчити вручну.
    3. Повністю автоматичний. Це багато разів критикували, і довгий час у нас не було хорошого повністю автоматичного генератора Python API, інтегрованого з Sphinx, поки не з’явився AutoAPI , який є новим хлопцем у блоці. Це, безумовно, найкраще для автоматичної генерації API у Python (примітка: безсоромна самореклама).

Є й інші варіанти, на які слід звернути увагу:

  • Дихайте : це почалося як дуже гарна ідея, і це має сенс, коли ви працюєте з декількома відповідними проектами іншими мовами, які використовують Doxygen. Ідея полягає у використанні виводу Doxygen XML та передачі його до Sphinx для створення вашого API. Отже, ви можете зберегти всю доброту Доксигену та уніфікувати систему документації в Сфінксі. Чудово в теорії. Зараз, на практиці, востаннє, коли я перевіряв, проект не був готовий до виробництва.
  • pydoctor *: Дуже конкретно. Генерує власну продукцію. Він має деяку базову інтеграцію зі Sphinx та деякі приємні особливості.

Яка команда для використання autoapi. Я змінив conf.py для включення модулів autoapi. В даний час я запускаю "сфінкс-апідок -о апідоки --повно."
Сандіп

Вам не потрібна додаткова команда. Просто створіть свою документацію Sphinx за допомогою sphinx-build. У мене це інтегровано з Tox так: github.com/HPENetworking/cookiecutter_python/blob/module/…
Havok,

@Havok Я не бачу, як AutoAPI є "повністю автоматичним", коли мені доводиться вкладати всі елементи модуля у __all__змінну explicite.
buhtz

20

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

Для генерації документів API із рядків докторів Python провідними інструментами є pdoc та pydoctor . Ось згенеровані pydoctor документи для API для Twisted і Bazaar .

Звичайно, якщо ви просто хочете поглянути на рядки документації під час роботи над матеріалом, існує інструмент командного рядка " pydoc ", а також help()функція, доступна в інтерактивному інтерпретаторі.


2
Це правда, що сфінкс використовує документи, написані незалежно від вихідного коду, як основу, але використовуючи розширення autodoc, можна легко включити рядки документів з модулів python. Через його динамічний характер я вважаю рукописну документацію для модулів python більш корисною, ніж створені документи api.
Пітер Гофман

3
"Рукописні" документи недоступні, коли ви намагаєтеся проаналізувати структуру та взаємозв'язок між класами в якомусь документованому проекті.
Ярослав Рахматуллин

13

Іншим дуже хорошим інструментом документації є сфінкс . Він буде використаний для майбутньої документації python 2.6 і використовується django та багатьма іншими проектами python.

З веб-сайту сфінкса:

  • Вихідні формати : HTML (включаючи довідку Windows HTML) та LaTeX для версій PDF для друку
  • Широкі перехресні посилання : семантична розмітка та автоматичні посилання для функцій, класів, термінів глосарію та подібної інформації
  • Ієрархічна структура : легке визначення дерева документів, з автоматичними посиланнями на братів і сестер, батьків та дітей
  • Автоматичні індекси : загальний індекс, а також індекс модуля
  • Обробка коду : автоматичне підсвічування за допомогою підсвітки Pygments
  • Розширення : автоматичне тестування фрагментів коду, включення документації з модулів Python тощо

11
Спробували. Хоча сфінкс сам по собі є дуже цікавим інструментом, він не був таким, як я очікував, походить від кисню. Додатково як інструмент для дійсно хорошого документа для кінцевих споживачів, doxygen набагато кращий для розробника програмного забезпечення, який просто хотів би бачити огляд API у приємному форматі для друку.
Зейн

3
@Zane Я згоден. Як любитель кисню, я занадто сильно скучив за повністю автоматичним створенням довідкових інструкцій по API. Перевірте мою відповідь, оскільки тепер доступний інший варіант.
Хавок
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.