378 lines
11 KiB
ReStructuredText
378 lines
11 KiB
ReStructuredText
Руководство по документации тестов с помощью Sphinx
|
||
====================================================
|
||
|
||
**Версия документа:** 1.0
|
||
**Дата последнего обновления:** 2025-11-27
|
||
|
||
.. contents:: Содержание
|
||
:depth: 3
|
||
:local:
|
||
|
||
1 Расположение документа
|
||
-------------------------
|
||
|
||
Данное руководство расположено в структуре проекта по пути:
|
||
|
||
.. code-block:: text
|
||
|
||
project_root/
|
||
├── docs/
|
||
│ ├── source/
|
||
│ │ ├── conf.py
|
||
│ │ ├── index.rst
|
||
│ │ ├── sphinx_guide.rst <-- Этот файл
|
||
│ │ └── modules.rst
|
||
│ └── build/
|
||
├── src/
|
||
│ └── your_package/
|
||
└── pyproject.toml
|
||
|
||
2 Первичная настройка для нового проекта
|
||
-----------------------------------------
|
||
|
||
2.1 Подготовка зависимостей
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
.. code-block:: bash
|
||
|
||
# Установка 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
|
||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
.. code-block:: bash
|
||
|
||
# Создание структуры документации
|
||
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``:
|
||
|
||
.. code-block:: python
|
||
|
||
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``:
|
||
|
||
.. code-block:: rst
|
||
|
||
Документация проекта
|
||
====================
|
||
|
||
.. toctree::
|
||
:maxdepth: 3
|
||
:caption: Содержание:
|
||
|
||
modules
|
||
|
||
Инструкции и процессы
|
||
---------------------
|
||
|
||
.. toctree::
|
||
:maxdepth: 2
|
||
:caption: Документация и руководства:
|
||
|
||
sphinx_guide
|
||
|
||
Описание
|
||
-----------
|
||
Основная документация проекта.
|
||
|
||
Индексы
|
||
=======
|
||
|
||
* :ref:`genindex`
|
||
* :ref:`modindex`
|
||
* :ref:`search`
|
||
|
||
3 Работа с существующим проектом
|
||
---------------------------------
|
||
|
||
**Примечание:** Для работы с существующим проектом требуется установка Sphinx на локальной машине.
|
||
|
||
3.1 Установка зависимостей
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
.. code-block:: bash
|
||
|
||
# Установка Sphinx и необходимых расширений
|
||
pip install sphinx sphinx-rtd-theme myst-parser
|
||
|
||
# Или установка из зависимостей проекта (если настроено в pyproject.toml)
|
||
pip install -e ".[docs]"
|
||
|
||
3.2 Генерация документации
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
3.2.1 Базовая генерация
|
||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
.. code-block:: bash
|
||
|
||
# Генерация .rst файлов из структуры проекта
|
||
sphinx-apidoc -o docs/source . -f
|
||
|
||
# Сборка HTML документации
|
||
sphinx-build -b html docs/source docs/build/html
|
||
|
||
3.2.2 Генерация с исключениями
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
.. code-block:: bash
|
||
|
||
# Исключение определенных папок из документации
|
||
sphinx-apidoc -o docs/source . -f --exclude tests/ --exclude migrations/
|
||
|
||
3.2.3 Принудительная перегенерация
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
.. code-block:: bash
|
||
|
||
# Принудительная перезапись существующих файлов
|
||
sphinx-apidoc -o docs/source . -f --force
|
||
|
||
3.3 Очистка документации
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Когда требуется очистка:
|
||
|
||
- **После удаления модулей** - чтобы убрать ссылки на несуществующие файлы
|
||
- **После переименования пакетов** - для актуализации структуры
|
||
- **При изменении архитектуры проекта** - для отражения новых модулей
|
||
- **При появлении предупреждений** о несуществующих модулях
|
||
|
||
3.3.1 Команды очистки
|
||
^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
.. code-block:: bash
|
||
|
||
# Удаление старых сгенерированных .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 Автоматизация очистки
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
.. code-block:: makefile
|
||
|
||
.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 Локальная сборка
|
||
^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
.. code-block:: bash
|
||
|
||
# Базовая сборка HTML
|
||
sphinx-build -b html docs/source docs/build/html
|
||
|
||
# Сборка с автоматическим обновлением
|
||
sphinx-autobuild docs/source docs/build/html
|
||
|
||
3.4.2 Проверка качества
|
||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
.. code-block:: bash
|
||
|
||
# Проверка ссылок
|
||
sphinx-build -b linkcheck docs/source docs/build/linkcheck
|
||
|
||
# Проверка орфографии (требуется установка sphinxcontrib-spelling)
|
||
sphinx-build -b spelling docs/source docs/build/spelling
|
||
|
||
3.4.3 Сборка для публикации
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
.. code-block:: bash
|
||
|
||
# Сборка 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
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
.. code-block:: bash
|
||
|
||
# Игнорирование билд-папки в Git
|
||
echo "docs/_build/html/" >> .gitignore
|
||
echo "docs/_build/latex/" >> .gitignore
|
||
|
||
4 Конвертация контента из MkDocs в Sphinx
|
||
------------------------------------------
|
||
|
||
4.1 Текст
|
||
~~~~~~~~~~
|
||
|
||
**MkDocs (markdown):**
|
||
|
||
.. code-block:: markdown
|
||
|
||
# Заголовок
|
||
Текст с **жирным** шрифтом.
|
||
- Элемент списка 1
|
||
- Элемент списка 2
|
||
|
||
**Sphinx (reStructuredText):**
|
||
|
||
.. code-block:: rst
|
||
|
||
Заголовок
|
||
=========
|
||
Текст с **жирным** шрифтом.
|
||
* Элемент списка 1
|
||
* Элемент списка 2
|
||
|
||
4.2 Таблицы
|
||
~~~~~~~~~~~~
|
||
|
||
**MkDocs:**
|
||
|
||
.. code-block:: markdown
|
||
|
||
| Заголовок 1 | Заголовок 2 |
|
||
|-------------|-------------|
|
||
| Данные 1 | Данные 2 |
|
||
|
||
**Sphinx:**
|
||
|
||
.. code-block:: rst
|
||
|
||
+-------------+-------------+
|
||
| Заголовок 1 | Заголовок 2 |
|
||
+=============+=============+
|
||
| Данные 1 | Данные 2 |
|
||
+-------------+-------------+
|
||
|
||
5 Особенности Sphinx
|
||
---------------------
|
||
|
||
5.1 Поддержка docstrings
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
.. code-block:: python
|
||
|
||
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 Кастомные директивы
|
||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
.. code-block:: rst
|
||
|
||
.. 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** - домены для специфичной документации
|
||
|
||
.. _version-history:
|
||
|
||
История версий
|
||
--------------
|
||
|
||
+---------+------------+-----------------------------------+
|
||
| Версия | Дата | Изменения |
|
||
+=========+============+===================================+
|
||
| 1.0 | 2025-11-27 | Первоначальная версия руководства |
|
||
+---------+------------+-----------------------------------+ |