The Precognition

Личный блог Николая Ситала

Документация как код


Разработка технической документации с использованием инструментов и процессов, что и написание кода:

Довольно часто, качественное описание документации занимает много времени, а поддержка в актуальном состоянии требует постоянных трудозатрат. При небольшом объеме проекта, просто использовать всем знакомые текстовые процессоры и редакторы. Но в один прекрасный день, я осознал, что немогу быть эффективным при описании системы в промышленных масштабах.

Скорость, удобочитаемость, поддержка, автоматизация и доступность, - это те вещи которые желаешь видеть, но не знаешь как реализовать.

Можно ли это автоматизировать и создать отличный статический веб-сайт, описывающий документацию?

Да. И вот где приходит на помощь Sphinx!

Что такое Sphinx?

Sphinx — это генератор документации на Python, преобразующий файлы в формате reStructuredText в HTML website и другие форматы. Он использует ряд расширений для reStructuredText.

Инсталяция Sphinx?

Выполните следующий код в терминале в виртуальном окружении python

pip install sphinx sphinx_rtd_theme

Создание структуры папок

sphinx_basic
|-docs
|-infor
  |-__init__.py
  |-add.py
  |-divide.py
  |-multiply.py
  |-substract.py
|-venv

Папка docs необходима для создания проекта с использованием Sphinx, название папки не имеет значения. Папка infor будет служить для хранения кода который мы вставим позже в сгененрированные файлы документации в папке docs.

Шаг1: Sphinx-quickstart

В терминале перейдите в папку docs, выполните следующую команду в терминале с запущеннім виртуальным окружением python

sphinx-quickstart

sphinx-quickstart — это интерактивный инструмент, который задает несколько вопросов о вашем проекте, а затем создает полный каталог документации вместе с файлом make.bat, который позже будет использоваться для создания HTML.

Шаг2: Отредактируйте conf.py file

Добавьте следующие строки в начало файла, после текстового описания

import os
import sys
sys.path.insert(0, os.path.abspath('..'))

os.path.abspath('..') сообщаем sphinx, что код находится за пределами текущей папки docs. Добавьте расширения, указанные ниже:

extensions = [
    'sphinx.ext.autodoc',
    'sphinx.ext.viewcode',
    'sphinx.ext.napoleon'
]

Далее, перейдите к темам и замените alabaster на sphinx_rtd_theme. Полный обновленный файл conf.py приведен ниже:

# Configuration file for the Sphinx documentation builder.
#
# For the full list of built-in configuration values, see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html

# -- Project information -----------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information

import os
import sys
sys.path.insert(0, os.path.abspath('..'))


project = 'infor'
copyright = '2023, Sitala'
author = 'Sitala'
release = '00.00.01'

# -- General configuration ---------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration

extensions = [
    'sphinx.ext.autodoc',
    'sphinx.ext.viewcode',
    'sphinx.ext.napoleon'
]

templates_path = ['_templates']
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']

language = 'ru'

# -- Options for HTML output -------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output

html_theme = 'sphinx_rtd_theme'
html_static_path = ['_static']

Шаг3: Генерация .rst files

До сих пор в вашей папке документов был index.rst, который будет целевой страницей вашей документации. Но мы не сгенерировали infor.rst, в котором есть наш код на Python.

Перейдите в родительскую папку sphinx_basics и выполните команду:

sphinx-apidoc -o docs infor/

По этой команде sphinx берет наш код из папки infor и выводит сгенерированные файлы .rst в папку docs. После чего вы увидите файлы infor.rst и modules.rst, сгенерированные в ваших документах.

Шаг4: Включение module.rst и создание html

Теперь включите сгенерированный файл modules.rst в свой index.rst. Добавьте строчку modules

.. tets documentation master file, created by
sphinx-quickstart on Fri Jul 28 19:38:14 2023.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.

Welcome to tets's documentation!
================================

.. toctree::
:maxdepth: 2
:caption: Contents:

modules

Indices and tables
==================

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

Теперь все готово для создания красивой документации, зайдите в папку с документами и выполните команду

make html

Вот и все!!!. Вы можете увидеть файлы HTML, сгенерированные внутри вашей папки _build в документах. Также, в дополнение к этому, вы можете искать любые методы, подпакеты и т. д. на странице поиска.

Вся тяжелая работа по созданию HTML-документации была сделана Sphinx.

Теперь предположим, что вы внесли некоторые изменения в свой код и теперь хотите перестроить этот HTML. Перейдите в папку с документами и напишите

make clean html
make html

Эти команды перестроят ваши HTML-коды с учетом ваших изменений.

Ура! Мы успешно автоматизировали сборку части документации.

Ссылка на документацию Sphinx