我们有一个 Sphinx 配置,它将为我们的整个代码库生成大量 HTML 文档。有时,我正在处理一个文件,我只想查看该文件的 HTML 输出,以确保在不运行整个套件的情况下获得正确的语法。
我寻找可以在终端中运行的最简单的命令来在这个文件上运行 sphinx,我确定信息就在那里,但我没有看到它。
我们有一个 Sphinx 配置,它将为我们的整个代码库生成大量 HTML 文档。有时,我正在处理一个文件,我只想查看该文件的 HTML 输出,以确保在不运行整个套件的情况下获得正确的语法。
我寻找可以在终端中运行的最简单的命令来在这个文件上运行 sphinx,我确定信息就在那里,但我没有看到它。
Sphinx 处理 reST 文件(不是直接的 Python 文件)。这些文件可能包含对 Python 模块的引用(当您使用 autodoc 时)。我的经验是,如果自上次完整输出构建以来只修改了一个 Python 模块,Sphinx 不会重新生成所有内容;仅处理“拉入”该特定 Python 模块的 reST 文件。有消息说updating environment: 0 added, 1 changed, 0 removed
。
要显式处理单个 reST 文件,请将其指定为以下参数sphinx-build
:
sphinx-build -b html -d _build/doctrees . _build/html your_filename.rst
这分两步完成:
这个脚本完成了这项工作。在与模块相同的目录中调用它,并提供模块的文件名:
#!/bin/bash
# Generate html documentation for a single python module
PACKAGE=${PWD##*/}
MODULE="$1"
MODULE_NAME=${MODULE%.py}
mkdir -p .tmpdocs
rm -rf .tmpdocs/*
sphinx-apidoc \
-f -e --module-first --no-toc -o .tmpdocs "$PWD" \
# Exclude all directories
$(find "$PWD" -maxdepth 1 -mindepth 1 -type d) \
# Exclude all other modules (apidoc crashes if __init__.py is excluded)
$(find "$PWD" -maxdepth 1 -regextype posix-egrep \
! -regex ".*/$MODULE|.*/__init__.py" -type f)
rm .tmpdocs/$PACKAGE.rst
# build crashes if index.rst does not exist
touch .tmpdocs/index.rst
sphinx-build -b html -c /path/to/your/conf.py/ \
-d .tmpdocs .tmpdocs .tmpdocs .tmpdocs/*.rst
echo "**** HTML-documentation for $MODULE is available in .tmpdocs/$PACKAGE.$MODULE_NAME.html"