Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Automatically Generating Documentation for All Python Package Contents

I'm trying to auto-generate basic documentation for my codebase using Sphinx. However, I'm having difficulty instructing Sphinx to recursively scan my files.

I have a Python codebase with a folder structure like:

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

I ran sphinx-quickstart in <workspace>, so now my structure looks like:

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

I've read the quickstart tutorial, and although I'm still trying to understand the docs, the way it's worded makes me concerned that Sphinx assumes I'm going to manually create documentation files for every single module/class/function in my codebase.

However, I did notice the "automodule" statement, and I enabled autodoc during quickstart, so I'm hoping most of the documentation can be automatically generated. I modified my conf.py to add my src folder to sys.path and then modified my index.rst to use automodule. So now my index.rst looks like:

Contents:  .. toctree::    :maxdepth: 2  Indices and tables ==================  * :ref:`genindex` * :ref:`modindex` * :ref:`search`  .. automodule:: alphabuyer    :members: 

I have dozens of classes and functions defined in the subpackages. Yet, when I run:

sphinx-build -b html . ./_build 

it reports:

updating environment: 1 added, 0 changed, 0 removed 

And this appears to have failed to import anything inside my package. Viewing the generated index.html shows nothing next to "Contents:". The Index page only shows "mypackage (module)", but clicking it shows it also has no contents.

How do you direct Sphinx to recursively parse a package and automatically generate documentation for every class/method/function it encounters, without having to manually list every class yourself?

like image 782
Cerin Avatar asked Jan 06 '11 15:01

Cerin


People also ask

How does pydoc create documentation?

You can access the interactive shell in pydoc using it's help function. In order to do this, launch your terminal, and enter the python interactive shell. Now, import pydoc and then use the pydoc. help() command to launch the interactive shell.


1 Answers

You can try using 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>. 

You can mix sphinx-apidoc with sphinx-quickstart in order to create the whole doc project like this:

$ sphinx-apidoc -F -o docs project 

This call will generate a full project with sphinx-quickstart and Look recursively in <module_path> (project) for Python modules.

like image 153
Daniel Avatar answered Oct 11 '22 13:10

Daniel