Создать сайт с документацией по проекту можно с помощью сервиса Read the Docs. Для этого необходимо проделать несколько шагов, описанных ниже.
После регистрации аккаунта на сайте readthedocs.org необходимо связать аккаунт с GitHub аккаунтом, владеющим проектом, который необходимо документировать. Эта процедура настраивается с помощью "Import a Project -> Connect to GitHub -> Выбор репозитория из списка доступных"
После интеграции проекта в среду Read The Docs вы увидите доступный для настройки проект
В разделе "Admin -> Advanced Settings" важно и нужно:
Эта функция позволяет автоматически собирать документацию после каждого коммита в PR
Контрибьютор должен зарегистрироваться на сайте readthedocs.org, добавить его к проекту можно, используя электронную почту.
Для добавления нового участника перейдите в "Admin -> Maintainers"
Для того, чтобы в системе Read The Docs собиралась документация из репозитория необходимо в самом репозитории
создать "структуру" собираемой документации. Глобально, вся структура документации и настройки её отображения содержатся в директории docs
, а
корне репозитория располагается манифест .readthedocs.yml
, позволяющий "активировать" сборку документации.
В качестве примера организации структуры можно заглянуть в open-source проект
Создать начальную структуру документации внутри проекта можно 2 способами:
- С помощью библиотеки sphinx:
Шаг 1. Установка библиотеки локально
Шаг 2. Создание структуры документации с помощью команды быстрой настройки
- Импортировать готовые настройки из стороннего проекта:
Шаг 1. В корень репозитория скопировать манифест .readthedocs.yml (можно копировать без внесения правок)
Шаг 2. В корень репозитория скопировать директорию docs
Шаг 3. Внутри директории
docs
удалитьtutorials
, очистить от изображений директориюimg
(в дальнейшем в этой директории будут храниться все изображения вашей документации)Шаг 4. Внутри директории
docs->source
оставить только файлыindex.rst
,conf.py
(значение этих файлов и работа с ними описана ниже)
Для корректной сборки документации проекта в большинстве случаев будет достаточно импортировать существующие
конфигурации по пути docs -> source -> conf.py
из стороннего проекта, например GEFEST,
и изменить первую часть конфиг файла, заменив имя проекта и автора. Однако целью данного руководства является внесение ясности в суть имеющихся настроек.
В данном разделе в переменную extensions
необходимо поместить список расширений, которые необходимы для корректной сборки документации
Описание некоторых из них:
sphinx_rtd_theme
- устанавливает тему отображения документации (альтернатива -alabaster
)sphinx.ext.autodoc
- позволяет формировать документацию из докстринговsphinx.ext.napoleon
- добавляет в окружение проекта пакет napoleon, способный расширять функционал отображения документацииsphinx.ext.viewcode
- возможность отображения блоков кода в документацииsphinx.ext.mathjax
- возможность отображения математических формулsphinx.ext.graphviz
- дополнительный функционал для отображения графиков и другой визуализации
Каждый проект требует собственного набора расширений для той или иной задачи, основные можно найти в документации по extensions.
В данном разделе по умолчанию задается только переменная html_theme
, однако, если в документацию необходимо добавить, например, изображения формата GIF,
нужно добавить дополнительные настройки
Больше информации о настройках можно найти в документации Html Theming.
В данном разделе указываются дополнительные параметры для расширений extensions
, которые описаны в 3.1 General configuration.
Параметры для napoleon:
Больше информации о настройках можно найти в документации napoleon.
По умолчанию (в соответствии со стандартными настройками .readthedocs.yml
) структура документации строится в директории docs -> source
с помощью файла index.rst.
Первое, с чего нужно начать наполнение документации - схема (скелет/иерархия) всей документации. Нужно определить, какие разделы будут присутствовать,
в каком порядке они будут расположены относительно друг друга. Вся эта информация нужна для создания начального файла индексации index.rst
, расположенного в директории source
.
Например, структура может выглядеть так:
В данном случае index.rst
является лишь связующим звеном между файлами, содержащими контент. В сам файл записываются названия файлов с расширением .rst
или же пути в директории до других файлов (собственных для каждой отдельной директории) index.rst
На сайте документации в Read The Docs этот файл, помимо начальной страницы, которая выглядит вот так, создаст еще и иерархию контента:
В качестве наглядного примера работы созданной структуры можно посмотреть на связку файлов:
Начальный index.rst содержал в себе запись
со ссылкой на другой index.rst файл в директории docs -> source -> gefest -> index.rst
.
В свою очередь, последний файл содержал записи о том, что необходимо в данный раздел "подтянуть" контент из трех файлов:
gefest.rst,
installation.rst,
quickstart.rst.
Таким образом, на сайте в разделе документации GEFEST появилось три подраздела с контентом Intro to GEFEST,Installation from GitHub, Quickstart.
Для того, чтобы информация отображалась корректно, необходимо придерживаться корректного синтаксиса. Как шпаргалку можно использовать руководство по reStructuredText.
Во время создания таких файлов с контентом удобно использовать встроенные в IDE preview, для этого нужно установить в среду разработки расширение. Для VsCode или для PyCharm.
Докстринг - это описание метода/класса/функции и их параметров, обрамленное тройными кавычками.
Докстринги используются для автоматической генерации документации, а также в качестве превью методов/классов/функций для большего удобства при взаимодействии с модулями проекта в процессе написания кода.
Подробнее о написании докстрингов и их возможностях можно прочитать по ссылке.
Существует несколько вариантов синтаксиса докстрингов. В данном руководстве мы используем и рекомендуем для применения Google-Style как наиболее удобный в использовании и интуитивно понятный вариант.
По ссылке можно ознакомиться с правилами и конкретными примерами использования Google-Style докстрингов.
Оформление страниц документации на сайте Read The Docs, содержащей информацию о методах и классах из докстрингов осуществляется так же через
файлы с расширением .rst
.
Пример оформления файла с использованием докстрингов.
Страница документации, построенная с помощью данного файла.
Файл с кодом (контентом в докстрингах).
Из примера видно, что необходимо использовать команду .. autoclass:: <path to class>
. Эта команда используется тогда, когда нужно задокументировать докстринги только
одного конкретного класса во всем файле .py
. В случае, когда в документацию необходимо поместить все докстринги из файла с кодом, нужно использовать команду
.. automodule:: <path to class>
.
Подробнее о том, какие настройки отображения можно применить к данным командам в руководстве по autodoc.
После того, как создана структура документации, необходимо запустить процесс ее сборки.
Сборку документации можно выполнить локально (чтобы отследить корректность сборки и исправить ошибки сразу)
с помощью пакета Sphinx и команды make html
.
Однако отсутствие ошибок локально не гарантирует корректность сборки на сервере Read The Docs. Например, могут различаться версии Python, в таком случае часть документации не соберется из-за несовместимости синтаксиса кода.
В тот момент, когда происходит отправка очередного коммита с документацией в Pull Request на GitHub, документация начинает собираться автоматически:
Для того, чтобы проверить корректность сборки, необходимо перейти в личный кабинет на сайте readthedocs.org, зайти в проект и перейти в раздел "Сборки/Builds"
Последняя вкладка в данном разделе содержит лог сборки. Именно здесь можно найти причины некорректной сборки документации,
в данном случае, например, в одном из .rst
файлов некорректно использован синтаксис ReStructuredText.
Среди наиболее частых ошибок сборки документации в логе можно выделить:
- Несовместимость версий Python (локально Python 3.9, а в манифесте Python 3.7). Ошибка в данном случае будет в "некорректных" типах данных или импортах встроенных в Python модулей.
- Некорректный requirements.txt (в файле requirements.txt должны быть прописаны импорты внешних библиотек для sphinx extensions, например, autodocsumm )
- Некорректные имена файлов (в index.rst прописан файл introduction, а среди файлов в этой директории присутствует только intro.rst)
Вы всегда можете получить поддержку по созданию документации, задав вопрос через официальную страницу support или обратиться за помощью в чат поддержки ITMO.OpenSource.