sphinx.ext.intersphinx —— 链接到其他项目文档

0.5 新版功能.

此插件可以生成到外部项目中对象的文档的链接,要么明确地通过 external 角色,要么作为任何其他交叉引用的备用解析。

回退解析的用法很简单:每当 Sphinx 遇到交叉引用,该引用在当前文档集中没有匹配的目标,它就会在 intersphinx_mapping 中配置的外部文档集中寻找目标。像 :py:class:`zipfile.ZipFile` 可以链接到 Python 文档的 ZipFile 类,而不必指定它的确切位置。

当使用 external 角色时,你可以强制查找到任何外部项目,也可以选择查找到特定的外部项目。如果存在 :external:ref:`comparison manual <comparisons>` 这样的链接,则会链接到 label “comparisons” ,如果存在 :external+python:ref:`comparison manual <comparisons>` 这样的链接,则只会链接到文档集 “python” 中的 label “comparisons”。

在幕后,它的工作原理如下:

  • 每次 Sphinx HTML 构建都会创建名为 objects.inv 的文件,它包含了相对于 HTML 集合 root 的从对象名称到 URI 的映射。

  • 使用 Intersphinx 插件的项目可以在 intersphinx_mapping 配置值中指定这样的映射文件的位置。然后,这个映射将被用来解析 external 引用,以及其他文档链接中缺少的对象引用。

  • 默认情况下,映射文件被认为与文档的其他部分位于相同的位置;然而,映射文件的位置也可以单独指定,例如,如果文档应该在没有互联网接入的情况下构建。

配置

要使用 Intersphinx 链接,请将 'sphinx.ext.intersphinx' 添加到您的 extensions 配置值中,并使用这些配置值来激活链接:

intersphinx_mapping

这个配置值包含应该在本文档中链接到的其他项目的位置和名称。

目标位置的相对本地路径被认为是相对于构建文档的基础,而库存(inventory)位置的相对本地路径被认为是相对于源目录。

当获取远程库存文件时,代理设置将从环境变量 $HTTP_PROXY 中读取。

此配置值的旧格式

这是 Sphinx 1.0 之前使用的格式。它仍然是公认的。

将 URI 映射到 None 或 URI 的字典。键是外部 Sphinx 文档集的 base URI,可以是本地路径或 HTTP URI。这些值指示库存文件可以在哪里找到:它们可以是 None (与 base URI 在同一位置)或其他本地或 HTTP URI。

新格式的配置值

1.0 新版功能.

将唯一标识符映射到元组 (target, inventory) 的字典。每个 target 都是外部 Sphinx 文档集的 base URI,可以是本地路径或 HTTP URI。inventory 表示库存文件可以在哪里找到:它可以是 None (在与 base URI 相同的位置的 objects.inv 文件)或另一个本地文件路径或完整的 HTTP URI 到库存文件。

可以在 external 角色中使用的唯一标识符,这样就可以清楚地知道目标是属于哪个 intersphinx 设置的。像 external:python+ref:`comparison manual <comparisons>` 这样的链接将链接到文档集 “python” 中的 label “comparisons”,如果它存在的话。

示例

要添加在 Python 标准库文档中模块和对象的链接,请使用

intersphinx_mapping = {'python': ('https://docs.python.org/3', None)}

这将下载相应的 objects.inv 文件,并生成指向给定 URI 下的页面的链接。下载的目录被缓存在 Sphinx 环境中,所以当你进行全面重建时必须重新下载。

第二个例子,显示第二个元组项的非 None 值的含义:

intersphinx_mapping = {'python': ('https://docs.python.org/3',
                                  'python-inv.txt')}

这将从源目录中的 python-inv.txt 读取库存,但仍然生成指向 https://docs.python.org/3 下页面的链接。当新的对象被添加到 Python 文档时,更新库存文件是由你决定的。

库存的多个目标

1.3 新版功能.

可以为每个库存指定替代文件。可以为第二个库存元组项指定一个元组,如下例所示。这将通过(第二个)元组条目迭代读取库存,直到第一次成功获取。它的主要用例是为主库存的服务器停机指定镜像站点

intersphinx_mapping = {'python': ('https://docs.python.org/3',
                                  (None, 'python-inv.txt'))}

对于一套在本地编辑和测试后一起出版的书籍,可能会有帮助,首先尝试当地的库存文件,在出版前检查参考资料:

intersphinx_mapping = {
    'otherbook':
        ('https://myproj.readthedocs.io/projects/otherbook/en/latest',
            ('../../otherbook/build/html/objects.inv', None)),
}
intersphinx_cache_limit

缓存远程库存的最大天数。默认值是 5,即 5 天。将此设置为负值,以缓存无限时间的库存。

intersphinx_timeout

超时的秒数。默认值为 None,表示不超时。

备注

timeout 不是对整个响应下载的时间限制;相反,如果服务器没有针对超时时间发出响应,则会引发异常。

intersphinx_disabled_reftypes

4.3 新版功能.

字符串列表可以是:

  • 域中特定引用类型的名称,例如 std:docpy:func,或 cpp:class

  • 域的名称,通配符,如 std:*py:*cpp:*

  • 简单的通配符 *

缺省值为空列表。

当非 external 的交叉引用被 intersphinx 解析时,如果它符合这个列表中的规范,则跳过解析。

例如 intersphinx_disabled_reftypes = ['std:doc'] 交叉引用 :doc:`installation` 不会被 intersphinx 试图解析,但 :external+otherbook:doc:`installation` 将试图解析 intersphinx_mapping 中的库存命名 otherbook。同时,所有在 Python 中生成的交叉引用,声明仍然会被 intersphinx 解析。

如果 * 在域列表中,则 intersphinx 不会解析非 external 引用。

显式引用外部对象

Intersphinx 插件提供以下角色。

:external:

4.4 新版功能.

只在外部项目中使用 Intersphinx 执行查找,而不是当前项目。Intersphinx 仍然需要知道您想要找到的对象的类型,所以这个角色的一般形式是编写交叉引用,就像对象在当前项目中一样,但然后用 :external 作为前缀。这两种形式

  • :external:domain:reftype:`target`,如 :external:py:class:`zipfile.ZipFile`

  • :external:reftype:`target`,如 :external:doc:`installation`

如果你想限制查找到特定的外部项目,那么项目的键,如指定 intersphinx_mapping,也被添加,以获得两个形式

  • :external+invname:domain:reftype:`target`, e.g., :external+python:py:class:`zipfile.ZipFile`, or

  • :external+invname:reftype:`target`, e.g., :external+python:doc:`installation`.

在基本授权下对库存文件使用 Intersphinx

Intersphinx 支持这样的基本授权:

intersphinx_mapping = {'python': ('https://user:password@docs.python.org/3',
                                  None)}

在生成链接时,用户和密码将从 URL 中剥离。