[译] 使用 Shpinx 为 Python 项目自动生成文档

4,042 阅读6分钟

使用 Shpinx 为 Python 项目自动生成文档

Photo by Jason Blackeye on Unsplash

虽说非常有必要好好写项目文档,但写文档这个事儿还是经常被一拖再拖,并且大家都觉得它很繁琐、优先级也很低。开发人员也常常会想“既然对自己写的代码了如指掌,为啥还要写文档呢?”另外,随着代码的不断更新,维护文档也变成了一项繁重的负担。

好消息,得益于 Sphinx 的强大功能,我们无须再手动写文档了,Sphinx 可以从代码的注释中自动生成项目文档。

接下来我们逐步学习在 Python 代码中如何使用 Sphinx 自动生成结构良好、形式整洁的文档。

1. 安装 Sphinx

在终端中执行 pip install -U Sphinx 可以使用 pip 安装 Sphinx,或者直接从 Python package 官网上下载也可以。

Sphinx 官网上也讲了其他的安装方式,根据你的实际情况自由选择合适的方式安装即可,详见这里

2. 初始化 Sphinx 配置

在项目根目录下运行 sphinx-quickstart 来初始化 sphinx 的 source 目录并创建默认的配置。命令执行过程中,需要你填写一些基本的配置内容,比如是否创建单独的 sourcebuild 目录、项目的名称、作者以及版本。

使用 sphinx-quickstart 初始化 sphinx 配置

如上所示,运行 sphinx-build 命令会创建 Makefilemake.bat 文件以及 buildsource 目录(使用单独的 sourcebuild 目录的情况,译者注)。

3. 更新 conf.py 文件

source 目录下的 conf.py 是 Sphinx 的配置文件,控制着 Sphinx 如何生成文档。如果你可以在这里重新定义主题、版本或者模块目录。以下是一些推荐的配置内容:

修改主题

Sphinx 默认的主题是 alabaster。你既可以从这里选择心仪的主题,也可以自定义主题。推荐使用 sphinx_rtd_theme 的主题,不仅样式美观、具有现代感,还兼容手机视图。

你需要先安装 sphinx_rtd_theme 主题然后才能使用,可以通过运行 pip install sphinx-rtd-theme 安装,也可以手动下载该主题。

conf.py 文件中更新 html_theme 的值:

修改版本

每次项目发布都需要更新文档的版本,使其和项目版本保持一致,你可以手动更新也可以自动实现。

指定模块目录的路径

你也可以将项目的模块目录(即需要使用 sphinx 自动生成文档的代码文件所在的目录,译者注)添加到系统路径中,这样 sphinx 就能找到源文件了。配置文件中默认被注释掉的 13 ~ 15 行意在将模块目录添加到系统路径中,移除注释并修改 sys.path.insert(0, os.path.abspath(‘.’)) 这一行,把你的模块目录添加进去。

添加 autodoc 的扩展支持

extensions 是 Sphinx 生成文档的时候需要用到的一系列扩展。比如,你想使用 autodoc 指令自动导入需要生成文档的模块,只需在扩展列表中添加 sphinx.ext.autodoc 就行了。

添加扩展支持 NumPy 和 Google Doc 风格的注释

当然,这取决于你喜欢哪种格式的注释。如果代码的注释遵循了 Google Python 风格指南,你需要将 sphinx.ext.napoleon 添加到扩展列表中。

4. 自动生成 rst 文件

Sphinx 会根据 reStructruedText(rst)文件生成 HTML 文档。这些 rst 文件是对每个页面的描述,也可能会包含一些 autodoc 指令,并且最终会根据注释内容自动生成文档。由于可以自动生成这些文档,所以就没必要靠人工去给每个类或者模块去手写 autodoc 指令啦。

sphinx-autodoc 命令会根据代码生成包含 autodoc 指令 的 rst 文件。一旦 rst 文件生成之后,只有在项目中添加了新的模块时才需要重新运行这个命令。

首先,按照前文将 sphinx.ext.autodoc 扩展添加到 conf.py 文件的扩展列表中。

要自动生成 tst 文件,只需按照下面的语法运行 sphinx-apidoc 命令:

sphinx-apidoc -o \<输出目录> \<模块目录>

在本例中,source 是输出目录,python 是模块目录,

sphinx-apidoc -f -o source python

运行 sphinx-apidoc -o source python 命令会生成 rest.rstmodules.rst 文件。test.rst 包含了生成 test.py 文件中的类和方法文档所需的指令,而 modules.rst 文件包含了在模块列表中需要包含的文件(比如 test 文件)。(类似于模块的目录,译者注)

使用 sphinx-apidoc 生成 rst 文件

test module
===========

.. automodule:: test
   :members:
   :undoc-members:
   :show-inheritance:

5. 生成 HTML

既然你已经准备好了配置文件和 rst 文件,现在我们可以运行 make html 命令来生成 HTML 文件了,HTML 文件将会保存在 build/HTML 目录中。

使用 make HTML 生成 HTML

如你所见,这里出现了一个警告“Document isn't included in any toctree was issued since we haven’t included the modules.rst file in any toctree”,将 modules 添加到 index.rsttoctree 指令下可以修复这个问题:

.. SphinxDemo documentation master file, created by
   sphinx-quickstart on Wed Jul 22 15:15:34 2020.
   You can adapt this file completely to your liking, but it should at least
   contain the root `toctree` directive.

Welcome to SphinxDemo's documentation!
======================================

.. toctree::
   :maxdepth: 2
   :caption: Contents:

   modules



Indices and tables
==================

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

重新生成:

HTML 文件都在 build/HTML 目录下,我们在浏览器中打开 index.html 来一睹为快:

index.html

6. 高级 Shpinx 指令

还有许多其他的 Sphinx 指令 能帮你把文档组织地更好看、更具有现代感。以下这些指令都备受好评,希望对你优化文档有帮助。以下所有的案例都是使用 sphinx_rtd_theme 主题生成的:

目录

Sphinx 使用了传统的广为人知的 toctree 指令以树状结构来描述不同文件之间的关系,也就是目录。

目录

提示框

可以使用 note 指令创建提示框。

.. note:: This is a note box.

提示框

警告框

可以使用 warning 指令创建警告框。

.. warning:: This is a warning box.

警告框

图片

可以使用 image 指令创建图片。

.. image:: sphinx.png
    :align: center
    :width: 300px
    :alt: alternate text

表格

可以使用 table 指令创建表格。

.. table::
	:align: center
	:widths: auto

	+--------------------------------------+---------------------------------+
	| .. image:: sphinx.png                |                                 |
	|     :align: center                   |                                 |
	|     :width: 300px                    |                                 |
	|     :alt: alternate text             | A description can go here       |
	+--------------------------------------+---------------------------------+

表格和图片

其他资源

结束语

本文中,我们介绍了在 Python 项目中配置和使用 Sphinx 生成文档的基本内容。Sphinx 依赖 rst 文件,因此你可以在 rst 文件中自定义任何 reStructuredText 格式的内容。希望熟练使用 Sphinx 等自动化工具生成文档能够激励你书写并维护与时俱进的文档!

如果发现译文存在错误或其他需要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可获得相应奖励积分。文章开头的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏