Руководство по документации тестов с помощью Sphinx
Версия документа: 1.0 Дата последнего обновления: 2025-11-27
1 Расположение документа
Данное руководство расположено в структуре проекта по пути:
project_root/
├── docs/
│ ├── source/
│ │ ├── conf.py
│ │ ├── index.rst
│ │ ├── sphinx_guide.rst <-- Этот файл
│ │ └── modules.rst
│ └── build/
├── src/
│ └── your_package/
└── pyproject.toml
2 Первичная настройка для нового проекта
2.1 Подготовка зависимостей
# Установка Sphinx и тем
pip install sphinx sphinx-rtd-theme myst-parser
# Добавление в pyproject.toml
echo [project.optional-dependencies] >> pyproject.toml
echo docs = [ >> pyproject.toml
echo "sphinx>=8.2.3", >> pyproject.toml
echo "sphinx-rtd-theme>=2.0.0", >> pyproject.toml
echo "myst-parser>=2.0.0" >> pyproject.toml
echo ] >> pyproject.toml
2.2 Инициализация Sphinx
# Создание структуры документации
sphinx-quickstart docs --sep -p "PROJECT_NAME" -a "TEAM_NAME" -l ru --ext-autodoc --ext-viewcode --makefile --no-batchfile
2.3 Настройка конфигурации
Обновите docs/source/conf.py:
import os
import sys
sys.path.insert(0, os.path.abspath('../..'))
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.napoleon',
'sphinx.ext.viewcode',
'sphinx.ext.intersphinx',
'sphinx_rtd_theme',
]
autodoc_default_options = {
'members': True,
'member-order': 'bysource',
'special-members': '__init__',
'undoc-members': True,
'exclude-members': '__weakref__'
}
autodoc_typehints = 'description'
napoleon_google_docstring = True
napoleon_numpy_docstring = False
html_theme = 'sphinx_rtd_theme'
2.4 Настройка главной страницы
Обновите docs/source/index.rst:
Документация проекта
====================
.. toctree::
:maxdepth: 3
:caption: Содержание:
modules
Инструкции и процессы
---------------------
.. toctree::
:maxdepth: 2
:caption: Документация и руководства:
sphinx_guide
Описание
-----------
Основная документация проекта.
Индексы
=======
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
3 Работа с существующим проектом
Примечание: Для работы с существующим проектом требуется установка Sphinx на локальной машине.
3.1 Установка зависимостей
# Установка Sphinx и необходимых расширений
pip install sphinx sphinx-rtd-theme myst-parser
# Или установка из зависимостей проекта (если настроено в pyproject.toml)
pip install -e ".[docs]"
3.2 Генерация документации
3.2.1 Базовая генерация
# Генерация .rst файлов из структуры проекта
sphinx-apidoc -o docs/source . -f
# Сборка HTML документации
sphinx-build -b html docs/source docs/build/html
3.2.2 Генерация с исключениями
# Исключение определенных папок из документации
sphinx-apidoc -o docs/source . -f --exclude tests/ --exclude migrations/
3.2.3 Принудительная перегенерация
# Принудительная перезапись существующих файлов
sphinx-apidoc -o docs/source . -f --force
3.3 Очистка документации
Когда требуется очистка:
После удаления модулей - чтобы убрать ссылки на несуществующие файлы
После переименования пакетов - для актуализации структуры
При изменении архитектуры проекта - для отражения новых модулей
При появлении предупреждений о несуществующих модулях
3.3.1 Команды очистки
# Удаление старых сгенерированных .rst файлов кроме основных
rm docs/source/modules.rst
rm docs/source/pages.rst
rm docs/source/components.rst
# Удаление всех .rst файлов кроме основных (Linux/Mac)
find docs/source -name "*.rst" ! -name "index.rst" ! -name "sphinx_guide.rst" -delete
# Удаление всех .rst файлов кроме основных (Windows PowerShell)
Get-ChildItem docs/source -Filter "*.rst" | Where-Object { $_.Name -notin @("index.rst", "sphinx_guide.rst") } | Remove-Item
3.3.2 Автоматизация очистки
.PHONY: clean-docs rebuild-docs
clean-docs:
rm -rf docs/build/
find docs/source -name "*.rst" ! -name "index.rst" ! -name "sphinx_guide.rst" -delete
rebuild-docs: clean-docs
sphinx-apidoc -o docs/source . -f
sphinx-build -b html docs/source docs/build/html
3.4 Сборка и деплой
3.4.1 Локальная сборка
# Базовая сборка HTML
sphinx-build -b html docs/source docs/build/html
# Сборка с автоматическим обновлением
sphinx-autobuild docs/source docs/build/html
3.4.2 Проверка качества
# Проверка ссылок
sphinx-build -b linkcheck docs/source docs/build/linkcheck
# Проверка орфографии (требуется установка sphinxcontrib-spelling)
sphinx-build -b spelling docs/source docs/build/spelling
3.4.3 Сборка для публикации
# Сборка PDF (требуется LaTeX)
sphinx-build -b latex docs/source docs/build/latex
# Сборка EPUB
sphinx-build -b epub docs/source docs/build/epub
3.4.4 Настройка для CI/CD
# Игнорирование билд-папки в Git
echo "docs/_build/html/" >> .gitignore
echo "docs/_build/latex/" >> .gitignore
4 Конвертация контента из MkDocs в Sphinx
4.1 Текст
MkDocs (markdown):
# Заголовок
Текст с **жирным** шрифтом.
- Элемент списка 1
- Элемент списка 2
Sphinx (reStructuredText):
Заголовок
=========
Текст с **жирным** шрифтом.
* Элемент списка 1
* Элемент списка 2
4.2 Таблицы
MkDocs:
| Заголовок 1 | Заголовок 2 |
|-------------|-------------|
| Данные 1 | Данные 2 |
Sphinx:
+-------------+-------------+
| Заголовок 1 | Заголовок 2 |
+=============+=============+
| Данные 1 | Данные 2 |
+-------------+-------------+
5 Особенности Sphinx
5.1 Поддержка docstrings
def my_function(param1: str, param2: int) -> bool:
"""
Краткое описание функции.
Args:
param1: Описание параметра 1
param2: Описание параметра 2
Returns:
bool: Описание возвращаемого значения
Example:
>>> my_function("test", 5)
True
"""
return True
5.2 Кастомные директивы
.. note::
Это важное примечание.
.. warning::
Это предупреждение.
.. code-block:: python
def example():
print("Hello Sphinx!")
6 Решение проблем
6.1 Проблема: Модули не находятся
Решение: Проверьте sys.path в conf.py
6.2 Проблема: Не генерируются docstrings
Решение: Убедитесь, что установлены расширения autodoc и napoleon
6.3 Проблема: Тема не применяется
Решение: Проверьте html_theme в conf.py
7 Дополнительные возможности
Autosummary - автоматические summary таблицы
Intersphinx - ссылки между проектами
Custom domains - домены для специфичной документации
История версий
Версия |
Дата |
Изменения |
|---|---|---|
1.0 |
2025-11-27 |
Первоначальная версия руководства |