递归地使用 Sphinx 自动摘要生成 API 文档
Use Sphinx autosummary recursively to generate API documentation
我想使用 Sphinx 的 autosummary extension and templates to generate API docs recursively from docstrings. I want separate pages for each module, class, method, property and function. But it doesn't detect my templates at all. In fact, if I just remove the module.rst
file from _templates/autosummary/
, it renders the whole file exactly the same way as before. I've followed this SO question to the letter. If you're interested, the full repository is on GitHub。
编辑:它似乎生成了一个不同的文件,我必须删除 docs/_autosummary 才能读取新模板。但是,现在它会生成一个包含 sparse
header 和 description
header 的文件。它不会进入 {% if classes %}
和 {% if functions %}
指令。
我的目录结构如下:
- 稀疏
- 文档
- conf.py
- index.rst
- modules.rst
- _templates/autosummary/module.rst
目前相关的文件如下:
index.rst
:
.. sparse documentation master file, created by
sphinx-quickstart on Fri Dec 29 20:58:03 2017.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Welcome to sparse's documentation!
==================================
.. toctree::
:maxdepth: 2
:caption: Contents:
modules
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
modules.rst
:
API Reference
=============
Modules
-------
.. autosummary::
:toctree: _autosummary
sparse
_templates/autosummary/module.rst
:
{{ fullname | escape | underline }}
Description
-----------
.. automodule:: {{ fullname | escape }}
{% if classes %}
Classes
-------
.. autosummary:
:toctree: _autosummary
{% for class in classes %}
{{ class }}
{% endfor %}
{% endif %}
{% if functions %}
Functions
---------
.. autosummary:
:toctree: _autosummary
{% for function in functions %}
{{ function }}
{% endfor %}
{% endif %}
我最终需要以下文件:
modules.rst
:
API Reference
=============
.. rubric:: Modules
.. autosummary::
:toctree: generated
sparse
_templates/autosummary/module.rst
:
{{ fullname | escape | underline }}
.. rubric:: Description
.. automodule:: {{ fullname }}
.. currentmodule:: {{ fullname }}
{% if classes %}
.. rubric:: Classes
.. autosummary::
:toctree: .
{% for class in classes %}
{{ class }}
{% endfor %}
{% endif %}
{% if functions %}
.. rubric:: Functions
.. autosummary::
:toctree: .
{% for function in functions %}
{{ function }}
{% endfor %}
{% endif %}
_templates/autosummary/class.rst
:
{{ fullname | escape | underline}}
.. currentmodule:: {{ module }}
.. autoclass:: {{ objname }}
{% block methods %}
{% block attributes %}
{% if attributes %}
.. HACK -- the point here is that we don't want this to appear in the output, but the autosummary should still generate the pages.
.. autosummary::
:toctree:
{% for item in all_attributes %}
{%- if not item.startswith('_') %}
{{ name }}.{{ item }}
{%- endif -%}
{%- endfor %}
{% endif %}
{% endblock %}
{% if methods %}
.. HACK -- the point here is that we don't want this to appear in the output, but the autosummary should still generate the pages.
.. autosummary::
:toctree:
{% for item in all_methods %}
{%- if not item.startswith('_') or item in ['__call__'] %}
{{ name }}.{{ item }}
{%- endif -%}
{%- endfor %}
{% endif %}
{% endblock %}
_templates/autosummary/base.rst
:
{{ fullname | escape | underline}}
.. currentmodule:: {{ module }}
.. auto{{ objtype }}:: {{ objname }}
我还需要转到 sphinx/ext/autosummary/generate.py
并在函数 generate_autosummary_docs
中设置 imported_members=True
。
如果您不像我一样使用 numpydoc
,您可能需要删除 .. HACK
指令。
从 Sphinx 3.1 版(2020 年 6 月)开始,您可以使用新的 :recursive:
选项来获取 sphinx.ext.autosummary
自动检测包中的每个模块,无论嵌套有多深,并自动生成文档该模块中的每个属性、class、函数和异常。
在这里查看我的回答:
我想使用 Sphinx 的 autosummary extension and templates to generate API docs recursively from docstrings. I want separate pages for each module, class, method, property and function. But it doesn't detect my templates at all. In fact, if I just remove the module.rst
file from _templates/autosummary/
, it renders the whole file exactly the same way as before. I've followed this SO question to the letter. If you're interested, the full repository is on GitHub。
编辑:它似乎生成了一个不同的文件,我必须删除 docs/_autosummary 才能读取新模板。但是,现在它会生成一个包含 sparse
header 和 description
header 的文件。它不会进入 {% if classes %}
和 {% if functions %}
指令。
我的目录结构如下:
- 稀疏
- 文档
- conf.py
- index.rst
- modules.rst
- _templates/autosummary/module.rst
目前相关的文件如下:
index.rst
:
.. sparse documentation master file, created by
sphinx-quickstart on Fri Dec 29 20:58:03 2017.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Welcome to sparse's documentation!
==================================
.. toctree::
:maxdepth: 2
:caption: Contents:
modules
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
modules.rst
:
API Reference
=============
Modules
-------
.. autosummary::
:toctree: _autosummary
sparse
_templates/autosummary/module.rst
:
{{ fullname | escape | underline }}
Description
-----------
.. automodule:: {{ fullname | escape }}
{% if classes %}
Classes
-------
.. autosummary:
:toctree: _autosummary
{% for class in classes %}
{{ class }}
{% endfor %}
{% endif %}
{% if functions %}
Functions
---------
.. autosummary:
:toctree: _autosummary
{% for function in functions %}
{{ function }}
{% endfor %}
{% endif %}
我最终需要以下文件:
modules.rst
:
API Reference
=============
.. rubric:: Modules
.. autosummary::
:toctree: generated
sparse
_templates/autosummary/module.rst
:
{{ fullname | escape | underline }}
.. rubric:: Description
.. automodule:: {{ fullname }}
.. currentmodule:: {{ fullname }}
{% if classes %}
.. rubric:: Classes
.. autosummary::
:toctree: .
{% for class in classes %}
{{ class }}
{% endfor %}
{% endif %}
{% if functions %}
.. rubric:: Functions
.. autosummary::
:toctree: .
{% for function in functions %}
{{ function }}
{% endfor %}
{% endif %}
_templates/autosummary/class.rst
:
{{ fullname | escape | underline}}
.. currentmodule:: {{ module }}
.. autoclass:: {{ objname }}
{% block methods %}
{% block attributes %}
{% if attributes %}
.. HACK -- the point here is that we don't want this to appear in the output, but the autosummary should still generate the pages.
.. autosummary::
:toctree:
{% for item in all_attributes %}
{%- if not item.startswith('_') %}
{{ name }}.{{ item }}
{%- endif -%}
{%- endfor %}
{% endif %}
{% endblock %}
{% if methods %}
.. HACK -- the point here is that we don't want this to appear in the output, but the autosummary should still generate the pages.
.. autosummary::
:toctree:
{% for item in all_methods %}
{%- if not item.startswith('_') or item in ['__call__'] %}
{{ name }}.{{ item }}
{%- endif -%}
{%- endfor %}
{% endif %}
{% endblock %}
_templates/autosummary/base.rst
:
{{ fullname | escape | underline}}
.. currentmodule:: {{ module }}
.. auto{{ objtype }}:: {{ objname }}
我还需要转到 sphinx/ext/autosummary/generate.py
并在函数 generate_autosummary_docs
中设置 imported_members=True
。
如果您不像我一样使用 numpydoc
,您可能需要删除 .. HACK
指令。
从 Sphinx 3.1 版(2020 年 6 月)开始,您可以使用新的 :recursive:
选项来获取 sphinx.ext.autosummary
自动检测包中的每个模块,无论嵌套有多深,并自动生成文档该模块中的每个属性、class、函数和异常。
在这里查看我的回答: