自动生成所有Python包内容的文档

Cer*_*rin 51 python documentation documentation-generation python-sphinx

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

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

<workspace>
    src
        mypackage
            __init__.py
            subpackageA
                __init__.py
                submoduleA1
                submoduleA2
            subpackageB
                __init__.py
                submoduleB1
                submoduleB2
Run Code Online (Sandbox Code Playgroud)

我运行了sphinx-quickstart <workspace>,所以现在我的结构看起来像:

<workspace>
    src
        mypackage
            __init__.py
            subpackageA
                __init__.py
                submoduleA1
                submoduleA2
            subpackageB
                __init__.py
                submoduleB1
                submoduleB2
    index.rst
    _build
    _static
    _templates
Run Code Online (Sandbox Code Playgroud)

我已经阅读了快速入门教程http://sphinx.pocoo.org/tutorial.html,虽然我仍在尝试理解文档,但它的措辞让我担心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:
Run Code Online (Sandbox Code Playgroud)

我在子包中定义了几十个类和函数.然而,当我跑:

sphinx-build -b html . ./_build
Run Code Online (Sandbox Code Playgroud)

它报道:

updating environment: 1 added, 0 changed, 0 removed
Run Code Online (Sandbox Code Playgroud)

这似乎无法导入我的包内的任何东西.查看生成的index.html在"Contents:"旁边没有显示任何内容.索引页面仅显示"mypackage(模块)",但单击它显示它也没有内容.

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

Dan*_*iel 57

您可以尝试使用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>.
Run Code Online (Sandbox Code Playgroud)

您可以将sphinx-apidoc与sphinx-quickstart混合使用,以便创建整个doc项目,如下所示:

$ sphinx-apidoc -F -o docs project
Run Code Online (Sandbox Code Playgroud)

此调用将生成一个带有sphinx-quickstart的完整项目,并在(项目)中以递归方式查找Python模块.

希望这可以帮助!

  • @guilhermecgs `index.rst` 和 `modules.rst` 通常是在使用 `sphinx-apidoc` 之前使用 `sphinx-quickstart` 生成的。您可以通过使用 [`-F` 或 `-full` 标志](https://www.sphinx-doc.org/en/master/man/sphinx-apidoc) 仅使用 `sphinx-apidoc` 生成这些文件。 html#cmdoption-sphinx-apidoc-F)。 (3认同)

mzj*_*zjn 17

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

这里简要介绍了这个工具:http://comments.gmane.org/gmane.comp.python.sphinx.devel/2912.

或者更好的是,使用pdoc.


更新:在Sphinx 1.1版中添加了sphinx-apidoc实用程序.


mac*_*acm 5

注意

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

因此,转到您的conf.py并添加

import an_example_pypi_project.useful_1
import an_example_pypi_project.useful_2
Run Code Online (Sandbox Code Playgroud)

现在,您的index.rst看起来像:

.. toctree::
   :glob:

   example
   an_example_pypi_project/*
Run Code Online (Sandbox Code Playgroud)

make html