Создание документации для библиотек Python: методы и инструменты
Основные способы документирования Python библиотек
Современный подход: Sphinx с автоматической сборкой документации
Sphinx - это основной инструмент для создания документации Python проектов. Он поддерживает reStructuredText и Markdown, генерирует HTML, PDF, ePub. Для подключения докстрингов из кода используется расширение autodoc.
Как создать документацию библиотеки с помощью Sphinx, используя докстринги из исходного кода?
- Установите Sphinx и автодок:
pip install sphinx sphinx-autodocPython документация библиотек (документация библиотек python)
- Инициализируйте проект:
Ответьте на вопросы (разделите исходники и документацию).sphinx-quickstart - Настройте
conf.py: укажите путь к модулям и подключите расширения:import os import sys sys.path.insert(0, os.path.abspath('../src')) extensions = ['sphinx.ext.autodoc', 'sphinx.ext.napoleon'] - Создайте файл
.rstдля описания вашего модуля, используя директивы autodoc:.. automodule:: mymodule :members: :undoc-members: :show-inheritance: - Сгенерируйте HTML:
make html
Типичная ошибка:
Модуль не найден - ImportError: No module named 'mymodule'.
Решение: проверьте путь sys.path в conf.py. Убедитесь, что модуль установлен или находится в указанном каталоге.
Цель: создание полноценной документации с перекрёстными ссылками, поиском и автоматическим извлечением сигнатур функций.
Как получить документацию прямо из интерпретатора без установки дополнительных пакетов?
Используйте встроенный help() и атрибут __doc__.
def add(a: int, b: int) -> int:
"""Складывает два целых числа."""
return a + b
print(add.__doc__) # Складывает два целых числа.
help(add) # Покажет справку с сигнатурой и докстрингом.
Проблема:
Докстринг не отображается, если модуль загружен динамически или содержит только комментарии (#).
Решение: всегда используйте тройные кавычки внутри функции/класса/модуля.
Случай использования: быстрая проверка документации во время разработки.
Как сгенерировать HTML документацию одной командой без сложной настройки?
Утилита pydoc создаёт простую веб-страницу из докстрингов модуля.
python -m pydoc -w mymodule # создаёт mymodule.html
Для запуска сервера:
python -m pydoc -p 8080
Ошибка: pydoc не обрабатывает аннотации типов нового стиля (list[int]), если Python < 3.9.
Решение: обновите Python или используйте Sphinx.
Случай использования: быстрая документация для небольшого скрипта или модуля.
Как использовать MkDocs для документации Python библиотеки с Markdown?
MkDocs подходит для проектов, где документация пишется вручную в Markdown.
- Установка:
pip install mkdocs mkdocstrings - Создание проекта:
mkdocs new mydocs - Настройка
mkdocs.ymlдля автодока:site_name: My Library Docs plugins: - mkdocstrings - В Markdown файле используйте:
::: mymodule.MyClass - Сборка:
mkdocs build
Проблема: mkdocstrings не находит модуль из-за неправильного пути.
Решение: укажите путь в PYTHONPATH или настройте watch в mkdocs.yml.
Случай использования: проекты, где команда предпочитает Markdown reStructuredText.
Как встроить тесты документации с помощью doctest?
doctest позволяет запускать примеры из докстрингов как тесты.
def multiply(a, b):
"""
>>> multiply(2, 3)
6
>>> multiply('a', 3)
'aaa'
"""
return a * b
if __name__ == '__main__':
import doctest
doctest.testmod()
Ошибка: примеры не проходят из-за неточного форматирования вывода (пробелы, типы).
Решение: используйте # doctest: +NORMALIZE_WHITESPACE или # doctest: +ELLIPSIS для неточного совпадения.
Случай использования: гарантия актуальности примеров в документации.
Расширенные примеры оформления документации
Пример 1. Sphinx с автодокументированием класса в стиле Google
Код модуля calculator.py:
class Calculator:
"""Класс для выполнения базовых математических операций.
Args:
name (str): Название калькулятора (необязательно, по умолчанию "Calc").
Attributes:
history (list): Список выполненных операций.
"""
def __init__(self, name: str = "Calc"):
self.name = name
self.history = []
def add(self, a: float, b: float) -> float:
"""Сложение двух чисел.
Args:
a: Первое слагаемое.
b: Второе слагаемое.
Returns:
Сумма a и b.
Examples:
>>> calc = Calculator()
>>> calc.add(3, 4)
7.0
"""
result = a + b
self.history.append(('add', result))
return float(result)
Файл index.rst с директивой autoclass:
Calculator API
==============
.. autoclass:: calculator.Calculator
:members:
:undoc-members:
:inherited-members:
Результат сборки Sphinx:
Calculator класс
----------------
Класс для выполнения базовых математических операций.
Параметры конструктора:
- name (str) – Название калькулятора (по умолчанию "Calc").
Атрибуты:
- history (list) – Список выполненных операций.
add(a, b) -> float
Сложение двух чисел.
...
Пример 2. Интеграция с Read the Docs
Файл .readthedocs.yml для автоматической сборки:
version: 2
build:
os: ubuntu-22.04
tools:
python: "3.11"
sphinx:
configuration: docs/conf.py
builder: html
python:
install:
- method: pip
path: .
extra_requirements:
- docs
requirements.txt для документации:
sphinx==7.2.6
sphinx-rtd-theme==1.3.0
sphinx-autodoc==1.2.0
Пример 3. Использование Napoleon для форматов Google/NumPy
В conf.py подключите расширение Napoleon:
extensions = ['sphinx.ext.napoleon']
napoleon_google_docstring = True
napoleon_numpy_docstring = True
napoleon_include_init_with_doc = True
Пример докстринга в стиле NumPy:
def matrix_multiply(A: np.ndarray, B: np.ndarray) -> np.ndarray:
"""
Умножает две матрицы.
Parameters
----------
A : numpy.ndarray
Первая матрица (m x n).
B : numpy.ndarray
Вторая матрица (n x p).
Returns
-------
numpy.ndarray
Произведение матриц размерностью (m x p).
Raises
------
ValueError
Если число столбцов A не равно числу строк B.
"""
...
Пример 4. Динамическая документация с MkDocs и mkdocstrings
Структура проекта:
project/
├── src/
│ └── mylib.py
├── docs/
│ ├── index.md
│ └── api.md
├── mkdocs.yml
└── requirements.txt
Файл mkdocs.yml:
site_name: MyLib Documentation
nav:
- Главная: index.md
- API: api.md
plugins:
- mkdocstrings:
handlers:
python:
paths: [src]
options:
show_source: true
Файл api.md:
# API Reference
::: mylib.MyClass
rendering:
show_root_heading: true
show_root_full_path: false
Результат сборки mkdocs build – HTML страница с автоматически извлечённой документацией класса MyClass и его методов.