Python Sphinx

2025年4月12日 | 阅读11分钟

这通常使得那些有交付期限的项目严重依赖于核心活动,如代码审查、自动化测试、单元测试等。不幸的是,留给广泛文档编写的时间会非常少。然而,无论代码看起来多么干净整洁,或者其设计质量和思想有多么好,总会有团队成员在某个时候会重新审视同一段代码。

在没有文档或文档编写糟糕的代码中导航,在系统最关键的时刻并不是一种令人愉快的体验。如果没有适当的帮助,追踪逻辑、理解工作流程或追踪隐藏在代码深处的错误会很困难,甚至被描述为大海捞针。这里最可能的危险是产生错误或不一致,并且生产效率降低。尽管文档投入可能看起来比赶工期次要,但从长远来看,它会带来指数级的回报。编写良好的文档就像一本指南,可以帮助您和您的同事轻松地回顾和修改代码,而无需花费数小时来解开它的秘密。这不仅仅是为了今天;它对于长期维护、协作和扩展工作至关重要。

过程中最困难的部分就是文档编写,当最后期限临近时,它会占用最多的时间和精力。如果整个过程可以自动化呢?您可以想象即时创建一个专业、结构良好、视觉吸引人的网站,并自动记录整个代码库。听起来太好了,不可能是真的。这正是 Sphinx 发挥作用的地方!Sphinx 是一个强大的文档生成工具,它通过自动从源代码中提取注释、文档字符串和其他元数据,并以正确的导航、引用等方式使其看起来优雅,从而自动化了创建健壮、可访问的代码文档的复杂性。Sphinx 的灵活性和通用性使其独一无二。由于支持 HTML、PDF 和 ePub 等输出格式,它易于在任何平台上共享和使用。reStructuredText (reST) 和 Markdown 的兼容性意味着编写文档的过程直观且简单。

此外,Sphinx 还有许多可用的扩展和主题,可以根据项目的风格和需求自定义文档。它可以生成 HTML、PDF 和 ePub 等不同格式的输出,因此您可以轻松地在任何平台上共享和使用它。而且,由于兼容 reStructuredText (reST) 和 Markdown,编写文档非常直观和简单。

Sphinx 还提供了大量扩展和主题,让您可以自定义文档以匹配项目的外观和风格。将 Sphinx 集成到您的工作流程中,摆脱手动文档的瓶颈。这意味着您的代码库将保持良好文档化,而无需在时间和质量上妥协。无论是小型库还是企业级项目,Sphinx 都能为您提供维护清晰、有组织且专业的文档的能力,这对于您当前的团队以及未来的协作者都非常有益。

什么是 Sphinx?

简单来说,Sphinx 以 `.rst` 文件作为输入,然后只需几个命令即可生成清晰、可导航的 HTML 文档。这减少了格式化的手动麻烦;因此,人们可以更多地关注内容而不是其结构或呈现。但这本身就让 Sphinx 变得非凡,许多著名且广泛使用的库和框架,如 Python 中的 DjangoNumPySciPyScikit-LearnMatplotlib,或者可以肯定地说,至少有数千个其他库也是如此——使用 Sphinx 提供专业质量的文档。现在,轮到您为您的项目挥舞同样的利剑了!无论您的项目是一个短脚本还是规模更大,Sphinx 都将使文档编写比以往任何时候都更轻松、更高效。让我们深入了解 Sphinx 的世界,发掘您如何使用它将项目文档提升到一个全新的水平。

安装 Sphinx

要开始使用 Sphinx,请按照简单的步骤进行安装

步骤 1:安装 Python。要安装 Sphinx,您需要在系统中安装 Python。如果您系统中没有 Python,则需要从官方网站下载。

通过以下命令验证 Python 安装

步骤 2:创建虚拟环境

要创建虚拟环境,请确保您有一个干净且隔离的项目工作区

1. 要创建虚拟环境,请在命令提示符中输入以下命令

2. 要激活虚拟环境,请在命令提示符中输入以下命令

Sphinx-env\Scripts\activate

步骤 3:安装 Sphinx

在激活的虚拟环境中,输入以下命令并安装 Sphinx

命令

步骤 4:验证安装

输入以下命令以确认 Sphinx 已在您的虚拟环境中正确安装。

命令

现在 Sphinx 已成功安装在您的虚拟环境中,您可以根据您所做的工作生成项目文档。无论您是从事小型项目还是大型应用程序,Sphinx 都能让您的代码文档编写变得轻松且有条理。

文件夹结构

首先,创建一个名为 `sphinx basics` 的文件夹,在 `sphinx basics` 文件夹中创建两个名为 `docs` 和 `math` 的文件夹;在 `math` 文件夹中,创建四个用于加法、除法、乘法和减法的 Python 文件,最后一个 Python 文件是 `init.py`。文件夹结构如下所示

Sphinx-QuickStart

要开始使用 Sphinx,请进入 `docs` 文件夹(如果不存在则创建)。然后在命令提示符中运行以下命令

命令

此命令将初始化一个交互式设置向导,引导您完成 Sphinx 项目的设置。它包含一系列问题,关于项目文档的程度等等。回答完这些问题后,它会自动生成整个文件夹结构,包括适用于首次文档记录的必要文件。

sphinx-quickstart 示例

当您执行 `sphinx-quickstart` 命令时,它会要求您回答以下问题

  1. 项目名称:您的项目名称,例如,“MyProject”。
  2. 作者姓名:文档作者的姓名。
  3. 项目发布版本:您项目的当前版本,例如,“1.0.0”。
  4. 语言:您的文档将用哪种语言编写(默认是英语)。
  5. 目录结构:源目录和构建目录是否分开以更好地组织。
  6. 扩展模块:包含某些扩展,例如 `autodoc`,用于自动生成 API 文档。
  7. Makefile 和批处理文件:是否为类 Unix 系统生成 Makefile 和为 Windows 生成 `make.bat` 以构建文档。

只需按 Enter 键接受默认设置,或根据您的项目需求输入。

sphinx-quickstart 的主要优势

  1. 它自动化了项目文档的结构化创建。
  2. 在初始设置时提供自定义项目设置的灵活性。
  3. 生成重要的构建脚本(Makefile 和 make.bat)以简化文档生成。

编辑 conf.py 文件

设置好 Sphinx 项目后,您需要对 `conf.py` 文件进行一些更改,以便 Sphinx 能够找到您的项目代码并将其包含在文档中。方法如下

步骤 1:修改 conf.py 中的 sys.path

1. 打开 Sphinx 项目的 `source/` 文件夹中指定的 `conf.py` 文件。

2. 找到第 13、14 和 15 行。这些行通常默认被注释掉了

代码

3. 删除每行开头的 `#` 来取消注释这些行

代码

4. 将 `os.path.abspath('.')` 更新为 `os.path.abspath('..')`,如下所示

此更新告知 Sphinx 项目代码位于 `docs/` 文件夹之外,通常位于项目目录的根级别。

为什么要更改路径?

默认情况下,Sphinx 会在 `docs/` 目录中查找代码。然而,在大多数项目中,实际的 Python 代码位于根目录或 `docs/` 之外的另一个文件夹中。更改路径可确保 Sphinx 能够正确找到并记录您的代码。

步骤 2:向 conf.py 添加必需的扩展

1. 滚动到 `conf.py` 中的 `extensions` 部分。可以看到

代码

2. 为项目添加必需的 Sphinx 扩展。例如

代码

conf.py 的完整更新代码是

代码

说明

这是一个用于设置 Sphinx 文档项目的配置文件。整个文件包含关于项目的通用元数据,包括诸如名称(“maths”)、版权年份(2025)、作者姓名“Adam”以及项目版本(`00.00.1`)等信息。Python 模块所在的项目根目录的路径将附加到 Python 的系统路径上,以便 Sphinx 可以通过执行 `sys.path.insert` 来找到模块并记录项目。

它指定了一些 Sphinx 扩展,包括用于自动生成文档字符串的 `auto doc`、用于解析 Google 和 NumPy 风格文档字符串的 `napoleon` 扩展、用于添加源代码链接的 `view code`、用于添加 TODO 指令支持的 `todo` 以及用于渲染数学表达式的 `mathjax`。由于意外的重新声明为一个空列表,此列表随后被覆盖,从而禁用了所有扩展。

生成 .rst 文件

目前,您的 `docs` 文件夹包含一个 `index.rst` 文件,这是您的登陆页或文档的主要入口点。但是,它不包含用于记录特定 Python 代码(如 `maths`)的文件。要创建此文件,请按照以下步骤操作

在命令提示符中,转到 `sphinx basics` 文件夹并运行以下命令

命令

此命令告诉 Sphinx 查找 `maths` 文件夹中包含的 Python 代码,并在新创建的名为 `docs` 的子目录中创建带有 `.rst` 文件扩展名的相关文件。`*.rst` 文件成为一个重要实体,因为它们成为项目文档的基础。关于代码结构和功能的描述等最终会形成文档。

当您执行此命令时,Sphinx 会扫描指定的文件夹 `maths` 以查找 Python 模块和包。接下来,您会发现为每个模块创建了 `.rst` 文件。您的所有详细信息,如类定义、函数和文档字符串,都出现在这些文件中。除了各个 `.rst` 文件之外,Sphinx 还生成一个 `modules.rst` 文件。此文件充当了在结构化格式中列出的已记录模块的集中引用。

运行命令后,您将在 `docs` 文件夹中看到两个新文件:`maths.rst` 和 `modules.rst`。这些是文档的主要文件。`maths.rst` 是 `maths` 文件夹中代码的详细文档,而 `modules.rst` 是高层概述。您可以无缝地将代码文档包含在 Sphinx 生成的 HTML 或其他输出格式中,并进行导航。

包含 module.rst 并生成 html

将 Sphinx 自动创建的 `modules.rst` 添加到 `index.rst` 文件中。`modules.rst` 应该是主要入口点之一,因为它在高级别上提供了对项目中已记录的所有模块的概述。打开位于 `docs` 文件夹内的 `index.rst` 文件。`index.rst` 文件是登陆页,并控制内容的结构和导航。在 `index.rst` 文件中,找到标记为 `..toctree::` 指令的部分。此指令用于为文档创建目录。在 `..toctree::` 指令中,通过添加其名称(不带 `.rst` 扩展名)来添加对 `modules.rst` 的引用,如下所示代码

代码

说明

这是 Sphinx 文档的主要 `index.rst` 文件,是项目生成文档的入口点。它由 `sphinx-quickstart` 工具创建,并且可以根据需要进行自定义以构建文档。在顶部,它包含一个标题和数学文档,作为登陆页的标题。文件中的注释部分警告用户该文件由 Sphinx 生成,并且可以根据项目需求进行自定义。

该文件邀请用户填写 reStructuredText 或 reST 内容,这是一种非常轻量级的标记语言,主要用于技术文档。它还提供了一个指向官方 reStructuredText 文档的链接。

`.toctree::` 指令定义了文档的目录。它包括 `modules.rst` 文件,该文件列出并描述了项目中的模块。`:maxdepth: 2` 选项控制目录中显示的嵌套标题的深度,`caption: Contents:` 标记该部分。

底部有一个标记为“索引和表格”的部分,可以快速访问各种索引和搜索功能,包括指向通用索引(genindex)、模块索引(modindex)和搜索页面(search)的链接。这些索引使用户可以轻松地导航文档以查找特定主题、模块或关键字。此文件充当项目文档的结构化摘要和导航点。

然后,可以通过输入以下命令生成漂亮的文档

命令

使用此命令,将在 `docs` 文件夹的 `build` 文件夹中生成一个 HTML 文件。

Sphinx in Python

结论

有效的文档编写并非软件开发项目的 afterthought;它是协作、可扩展性和卓越性的核心功能。文档编写很复杂,但很快,它就会弥补需要与开发团队良好沟通的快速截止日期。它大大减少了重新审视、修改和维护代码库所花费的时间,并从长远来看给资源带来了相当大的压力。

但 Sphinx 是一个精简且自动化的解决方案来处理这项任务。它能以最快的方式将原始的 .rst 文件转换为文档的导航图,大大减少了编写或实际样式化所消耗的大量人工小时。其灵活性不仅允许以各种期望的格式输出,而且还与 Python 代码应用程序完美集成,从而使其成为 NumPy、Django 和 Matplotlib 等众多世界知名库的首选功能工具。