跳转至

Sphinx Python API 文档

一句话概述:Sphinx 是 Python 官方文档使用的生成器,能从代码注释自动提取 API 文档,支持输出 HTML/PDF/ePub 等多种格式。

核心知识点

概念白话解释
SphinxPython 文档生成器 = 从代码注释生成文档
reStructuredText (RST)标记语言 = Sphinx 的原生格式(比 Markdown 功能多)
MySTMarkdown 扩展 = 让 Sphinx 也能用 Markdown
autodoc自动文档 = 从 Python docstring 自动生成 API 文档
toctree目录树 = 组织文档结构
Read the Docs托管平台 = 免费托管 Sphinx 文档

安装配置

pip install sphinx                                    # 安装 Sphinx
pip install sphinx-rtd-theme                           # 安装 Read the Docs 主题
pip install myst-parser                               # 安装 MyST(用 Markdown 写文档)

# 快速初始化
mkdir docs && cd docs                                 # 创建文档目录
sphinx-quickstart                                     # 交互式初始化
# 输入项目名、作者名,其他默认即可

配置文件 conf.py

# docs/conf.py

project = '我的项目'                                    # 项目名
author = '彭文强'                                       # 作者
release = '1.0.0'                                     # 版本号

# 扩展
extensions = [
    'sphinx.ext.autodoc',                              # 自动从 docstring 生成文档
    'sphinx.ext.napoleon',                             # 支持 Google/NumPy 风格注释
    'sphinx.ext.viewcode',                             # 在文档中链接源码
    'sphinx.ext.intersphinx',                          # 跨项目引用
    'myst_parser',                                     # 支持 Markdown
]

# 支持 Markdown 文件
source_suffix = {
    '.rst': 'restructuredtext',                        # RST 格式
    '.md': 'markdown',                                 # Markdown 格式
}

# 主题
html_theme = 'sphinx_rtd_theme'                        # Read the Docs 主题

# autodoc 配置
autodoc_member_order = 'bysource'                      # 按源码顺序排列
autodoc_typehints = 'description'                      # 类型注解放在描述中

写 Python Docstring

# src/my_module.py

def calculate_diversity(abundance_table, method="shannon"):
    """计算微生物多样性指数。

    从物种丰度表计算 Alpha 多样性。

    Args:
        abundance_table (pd.DataFrame): 物种丰度表,行=样本,列=物种。
        method (str): 多样性指数方法,可选 "shannon"、"simpson"。
            默认为 "shannon"。

    Returns:
        pd.Series: 每个样本的多样性指数。

    Raises:
        ValueError: 丰度表包含负值时抛出。

    Example:
        >>> import pandas as pd
        >>> df = pd.DataFrame({'sp1': [10, 20], 'sp2': [30, 40]})
        >>> calculate_diversity(df, method="shannon")
        0    0.811
        1    0.811
        dtype: float64
    """
    if (abundance_table < 0).any().any():               # 检查负值
        raise ValueError("丰度表不能包含负值")
    # ... 计算逻辑

自动生成 API 文档

.. docs/api.rst

API 参考
========

my_module 模块
--------------

.. automodule:: my_module
   :members:
   :undoc-members:
   :show-inheritance:
# 自动扫描代码生成 RST 文件
sphinx-apidoc -o docs/api src/                        # 扫描 src/ 生成 API 文档

# 构建 HTML
cd docs
make html                                             # 构建(输出到 _build/html/)

# 构建 PDF(需要 LaTeX)
make latexpdf                                         # 生成 PDF

常见报错

报错原因解决
No module named 'xxx'autodoc 找不到模块在 conf.py 中添加 sys.path.insert(0, '../src')
Unknown directive 'automodule'没启用 autodocextensions 中加 'sphinx.ext.autodoc'
toctree contains reference to nonexisting document引用了不存在的文件检查 toctree 中的文件名
WARNING: duplicate object description重复定义检查是否重复 automodule

速查表

# 常用命令
sphinx-quickstart                                     # 初始化项目
sphinx-apidoc -o docs/api src/                        # 自动生成 API 文档
make html                                             # 构建 HTML
make latexpdf                                         # 构建 PDF

# 主要扩展
# autodoc    → 从 docstring 生成文档
# napoleon   → 支持 Google/NumPy docstring 风格
# viewcode   → 文档中显示源码链接
# myst_parser → 用 Markdown 写 Sphinx 文档
# intersphinx → 跨项目交叉引用

# Docstring 风格选择
# Google 风格 → Args: / Returns: / Raises:(推荐)
# NumPy 风格 → Parameters / Returns(科学计算常用)