55

我正在尝试使用 Sphinx 为我的代码库自动生成基本文档。但是,我很难指示 Sphinx 递归扫描我的文件。

我有一个 Python 代码库,其文件夹结构如下:

<workspace>
└── src
    └── mypackage
        ├── __init__.py
        │   
        ├── subpackageA
        │   ├── __init__.py
        │   ├── submoduleA1
        │   └── submoduleA2
        │   
        └── subpackageB
            ├── __init__.py
            ├── submoduleB1
            └── submoduleB2

我在 中运行 sphinx-quickstart <workspace>,所以现在我的结构如下所示:

<workspace>
├── src
│   └── mypackage
│       ├── __init__.py
│       │
│       ├── subpackageA
│       │   ├── __init__.py
│       │   ├── submoduleA1
│       │   └── submoduleA2
│       │
│       └── subpackageB
│           ├── __init__.py
│           ├── submoduleB1
│           └── ubmoduleB2
│
├── index.rst
├── _build
├── _static
└── _templates  

我已经阅读了快速入门教程,尽管我仍在尝试理解文档,但它的措辞让我担心 Sphinx 假设我将为我的代码库中的每个模块/类/函数手动创建文档文件.

但是,我确实注意到了“automodule”语句,并且在快速启动期间启用了 autodoc,所以我希望大部分文档都可以自动生成。我修改了我的 conf.py 以将我的 src 文件夹添加到 sys.path,然后修改我的 index.rst 以使用自动模块。所以现在我的 index.rst 看起来像:

Contents:

.. toctree::
   :maxdepth: 2

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

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

.. automodule:: alphabuyer
   :members:

我在子包中定义了几十个类和函数。然而,当我运行时:

sphinx-build -b html . ./_build

它报告:

updating environment: 1 added, 0 changed, 0 removed

这似乎无法在我的包中导入任何内容。查看生成的 index.html 在“Contents:”旁边没有显示任何内容。索引页面只显示“mypackage (module)”,但点击它显示它也没有任何内容。

如何指导 Sphinx 递归解析包并为它遇到的每个类/方法/函数自动生成文档,而不必自己手动列出每个类?

4

4 回答 4

60

您可以尝试使用 sphinx-apidoc。

$ sphinx-apidoc --help
Usage: sphinx-apidoc [options] -o <output_path> <module_path> [exclude_paths, ...]

Look recursively in <module_path> for Python modules and packages and create
one reST file with automodule directives per package in the <output_path>.

您可以将 sphinx-apidoc 与 sphinx-quickstart 混合使用,以便像这样创建整个 doc 项目:

$ sphinx-apidoc -F -o docs project

此调用将使用 sphinx-quickstart 生成一个完整的项目,并在 <module_path> (project) 中递归查找 Python 模块。

于 2011-11-10T20:44:45.350 回答
18

也许 apigen.py 可以提供帮助:https ://github.com/nipy/nipy/tree/master/tools 。

该工具在此处进行了非常简要的描述:http: //comments.gmane.org/gmane.comp.python.sphinx.devel/2912

或者更好的是,使用pdoc


更新:sphinx-apidoc实用程序已在 Sphinx版本 1.1中添加。

于 2011-01-06T17:32:49.080 回答
5

笔记

为了让 Sphinx(实际上是执行 Sphinx 的 Python 解释器)找到您的模块,它必须是可导入的。这意味着模块或包必须位于 sys.path 上的目录之一中——相应地调整配置文件中的sys.path

所以,去你的 conf.py 并添加

import an_example_pypi_project.useful_1
import an_example_pypi_project.useful_2

现在你的 index.rst 看起来像:

.. toctree::
   :glob:

   example
   an_example_pypi_project/*

make html

于 2013-08-22T17:52:18.557 回答
2

从 Sphinx 版本 3.1(2020 年 6 月)开始,如果您乐于使用它sphinx.ext.autosummary来显示汇总表,则可以使用新:recursive:选项自动检测包中的每个模块,无论嵌套多么深,并为每个属性、类、该模块中的功能和异常。

在这里查看我的答案:https ://stackoverflow.com/a/62613202/12014259

于 2020-06-29T09:00:23.600 回答