跳转到主要内容

Sphinx扩展,用于在每个构建时运行'sphinx-apidoc'

项目描述

Build Status

一个Sphinx扩展,用于在每个构建时运行sphinx-apidoc

概述

sphinx-apidoc是一个工具,用于自动生成Sphinx源文件,使用autodoc扩展,以其他自动API文档工具的风格记录整个包。实际上sphinx-apidoc并不构建文档,而是简单地生成它。因此,它必须在sphinx-build之前运行。这通常会导致以下tox.ini文件

[testenv:docs]
commands =
  sphinx-apidoc -o doc/api my_code my_code/tests
  sphinx-build -W -b html doc doc/_build/html

此扩展消除了需要在Sphinx外部保持该配置的需要。相反,此功能可以通过您的文档的conf.py文件启用和配置,如下所示

extensions = [
    'sphinxcontrib.apidoc',
    # ...
]
apidoc_module_dir = '../my_code'
apidoc_output_dir = 'reference'
apidoc_excluded_paths = ['tests']
apidoc_separate_modules = True

配置

apidoc扩展使用以下配置值

apidoc_module_dir

要记录的模块的路径。这必须是Python包的路径。此路径可以是相对于文档源目录的相对路径或绝对路径。

必需

apidoc_output_dir

输出目录。如果它不存在,则创建。此路径相对于文档源目录。

可选,默认为api

apidoc_template_dir

包含用户定义模板的目录。该目录下与默认apidoc模板(module.rst_tpackage.rst_ttoc.rst_t)匹配的模板文件将覆盖它们。默认模板位于site-packages/sphinx/templates/apidoc/。此路径是相对于文档源目录的。

可选,默认为'templates'

apidoc_excluded_paths

一个可选的排除模块列表。这些应该是相对于apidoc_module_dir的路径。支持fnmatch样式通配符。

可选,默认为[]

apidoc_separate_modules

将每个模块的文档放置在单独的页面上。否则,每个(子)包将有一个页面。

可选,默认为False

apidoc_toc_file

内容表文件的文件名。默认为modules。如果设置为False,则apidoc不会创建内容表文件。

可选,默认为None

apidoc_module_first

当设置为True时,将模块文档放在子模块文档之前。

可选,默认为False

apidoc_extra_args

传递给sphinx-apidoc的额外参数。这些参数放置在标志之后和模块名称之前。

可选,默认为[]

从pbr迁移

pbr历史上包含了一个自定义的build_sphinx distutils命令变体。这提供了一些功能,包括在构建过程中生成API文档。显然,这个扩展不需要这些功能。

pbr中API文档功能有两个实现:autodoc_treeautodoc。为了描述它们之间的差异,让我们探索如何使用这两个功能迁移实际项目。您的项目可能使用一个或两个:autodoc_tree使用autodoc_tree_index_modules设置启用,而autodoc使用autodoc_index_modules设置启用,这两个设置都位于setup.cfg[pbr]部分。

autodoc_tree

由于autodoc_tree基于sphinx-apidoc,迁移很简单。以python-openstackclient为例,查看最小版本的setup.cfgdoc/source/conf.py

[build_sphinx]
all_files = 1
build-dir = doc/build
source-dir = doc/source

[pbr]
autodoc_tree_index_modules = True
autodoc_tree_excludes =
  setup.py
  openstackclient/volume/v3
  openstackclient/tests/
  openstackclient/tests/*
api_doc_dir = contributor/api
extensions = ['']

迁移后,它将看起来像这样

[build_sphinx]
all_files = 1
build-dir = doc/build
source-dir = doc/source
extensions = ['sphinxcontrib.apidoc']

apidoc_module_dir = '../../openstack'
apidoc_excluded_paths = [
  'volume',
  'tests'
]
apidoc_output_dir = 'contributor/api'

这里有一些改动

  1. conf.py中配置apidoc_module_dir

    使用autodoc_tree功能,API文档总是为包含setup.cfg的目录生成,通常是顶级目录。使用此扩展时,您必须显式指定要为其生成文档的目录,使用apidoc_module_dir设置。您应该配置此设置以指向实际的包而不是顶级目录,这意味着您不需要担心跳过不相关的文件,如setup.py

  2. conf.py中配置apidoc_excluded_paths

    conf.py 中的 apidoc_excluded_paths 设置与在 setup.cfg 中的 [pbr] autodoc_tree_excludes 设置的工作方式完全相同;也就是说,它是一个描述相对于源目录要排除的文件和目录的 fnmatch 风格的路径列表。这意味着您可以使用 [pbr] autodoc_tree_excludes 设置中的值,尽管如果您已将 apidoc_module_dir 配置为指向顶级目录以外的其他目录,可能需要更新这些值。

  3. conf.py 中配置 apidoc_output_dir

    conf.py 中的 apidoc_output_dir 设置与在 setup.cfg 中的 [pbr] api_doc_dir 设置的工作方式完全相同;也就是说,它是一个相对于文档源目录的路径,所有 API 文档都应该写入该路径。您可以直接复制 [pbr] api_doc_dir 设置中的值。

  4. setup.cfg 中删除设置

    setup.cfg 文件的 [pbr] 部分删除以下设置

    • autodoc_tree_index_modules

    • autodoc_tree_excludes

    • api_doc_dir

    如果您希望使用 sphinx-build 来构建文档,还可能需要删除整个 [build_sphinx] 部分。

完成这些操作后,您的输出应该与之前完全一样。

autodoc

autodoc 不是基于 sphinx-apidoc。幸运的是,可以生成非常类似(虽然不是完全相同!)的内容。以 oslo.privsep 为例,再次查看 setup.cfgdoc/source/conf.py 的最小版本。

[build_sphinx]
all_files = 1
build-dir = doc/build
source-dir = doc/source

[pbr]
autodoc_index_modules = True
api_doc_dir = reference/api
autodoc_exclude_modules =
  oslo_privsep.tests.*
  oslo_privsep._*
extensions = ['']

迁移后,它将看起来像这样

[build_sphinx]
all_files = 1
build-dir = doc/build
source-dir = doc/source
extensions = ['sphinxcontrib.apidoc']

apidoc_module_dir = '../../oslo_privsep'
apidoc_excluded_paths = ['tests', '_*']
apidoc_output_dir = 'reference/api'
apidoc_separate_modules = True

所需的大部分更改与 autodoc_tree 相同,有一些例外。

  1. conf.py中配置apidoc_module_dir

    使用 autodoc 功能时,API 文档始终为 setup.cfg 所在的目录生成,这通常是顶级目录。使用此扩展时,必须使用 apidoc_module_dir 设置显式指定要为哪个目录生成文档。应将此配置为指向您的实际包而不是顶级目录,因为这意味着您不必担心跳过诸如 setup.py 这样的无关文件。

  2. conf.py中配置apidoc_excluded_paths

    conf.py 中的 apidoc_excluded_paths 设置与在 setup.cfg 中的 [pbr] autodoc_exclude_modules 设置不同,前者是 fnmatch 风格的 文件路径 列表,而后者是 fnmatch 风格的 模块路径 列表。因此,您可以重用 [pbr] autodoc_exclude_modules 设置中的大多数值,但您必须从 x.y 格式切换到 x/y 格式。如果您已将 apidoc_module_dir 配置为指向顶级目录以外的其他目录,可能还需要更新这些路径。

  3. conf.py 中配置 apidoc_output_dir

    conf.py 中的 apidoc_output_dir 设置与在 setup.cfg 中的 [pbr] api_doc_dir 设置的工作方式完全相同;也就是说,它是一个相对于文档源目录的路径,所有 API 文档都应该写入该路径。您可以直接复制 [pbr] api_doc_dir 设置中的值。

  4. conf.py 中配置 apidoc_separate_modules=True

    默认情况下,sphinx-apidoc 为每个包生成一个文档,而 autodoc 为每个(子)模块生成一个文档。通过将此属性设置为 True,我们确保使用后者行为。

  5. autoindex.rst 的引用替换为 modules.rst

    自动文档(autodoc)功能在输出目录中生成一个名为 autoindex.rst 的文件中的模块列表。相比之下,sphinx-apidoc 和此扩展将此文件称为 modules.rst。您必须将所有对 autoindex.rst 的引用更新为 modules.rst。您还可能希望配置任何包含此文档的 toctreedepth 选项,因为 modules.rst 是嵌套的。

  6. setup.cfg 中删除设置

    setup.cfg 文件的 [pbr] 部分删除以下设置

    • autodoc_index_modules

    • autodoc_exclude_modules

    • api_doc_dir

    如果您希望使用 sphinx-build 来构建文档,还可能需要删除整个 [build_sphinx] 部分。

完成后,您的输出应类似于之前。主要变化将在上面提到的 modules.rst 中,它使用嵌套布局,与 autoindex.rst 文件的平面布局相比。

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面