Generate files
The instructions here are for Windows. With slight modifications, they can be applied to other platforms. The code for this post is at https://github.com/travelmarx/travelmarx-blog/tree/master/sphinx-quickstart.
Make sure you have Sphinx installed, then clone the travelmarx-blog repo to your local environment. Starting in the sphinx-quickstart directory you should have the following:
> tree
│ .gitignore
│
└───mycode
myclasses.py
__init__.py
Run the Sphinx quickstart command.
> sphinx-quickstart
Accept defaults for everything except these parameters.
- Separate source and build directories (y/n) [n]: Y
- Project name: MyTestDocs
- Author name(s): your-alias
- autodoc: automatically insert docstrings from modules: (y/n) [n]: Y
extensions = ['sphinx.ext.autodoc']
Build the HTML. The command make html is a convenience for running the command sphinx-build -b html sourcedir buildir. The make file assumes current directory is source directory, and it creates the build directory "build". HTML is the default doc type produced.
> make html
> tree
> tree
├───build
│ ├───doctrees
│ └───html
│ ├───_sources
│ └───_static
├───mycode
└───source
├───_static
└───_templates
> build\html\index.html
At this point you have basically a framework to build on, but not much else. The index.html page should look like this.
The index.rst file
In the sphinx-quickstart\source folder there should be an index.rst file. Edit the file to add the automodule to automatically document members of a module myclasses.py.
> type index.rst
.. MyTestDocs documentation master file, created by
sphinx-quickstart on Thu Jun 20 14:06:30 2019.
Adapt this file to your liking, but it should at least
contain the root `toctree` directive.
Welcome to MyTestDocs's documentation!
======================================
.. toctree::
:maxdepth: 2
:caption: Contents:
.. automodule:: myclasses
:members:
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
The index file is the initial documentation file. You can see that lines in the index.rst appear in the index.html shown above. The index.rst file can contain reStructuredText documentation and directives (the same that appear in Python docstrings). In the example above, we are using automodule to indicate that the docstrings in myclasses should be documented.
Add test Python code
If you cloned the repo, you should have the following:
- mycode\myclasses.py module.
- mycode\__init__.py file, which signals that the directory contains a package.
Edit the source\config.py to so that Sphinx can find the code. Here are the lines:
import os
import sys
sys.path.insert(0, os.path.abspath('../mycode'))
Make sure the import lines are not commented out, i.e., have a "#" in front of them.
Here are the two files __init__.py and myclasses.py.
mycode\__init__.py
import myclasses
mycode\myclasses.py
class SimpleClass:
"""A simple example class"""
i = 12345
def f(self):
return 'hello world'
class Person:
"""Creates a Person based on name and age."""
def __init__(self, name, age):
self.name = name
self.age = age
Back in the root folder of sphinx-quickstart, rebuild:
> make html
The output should look something like this, which includes docstrings in myclasses.py:
If your code folder is outside the "doctest" folder, make changes to the os.path.abspath in the conf.py file as appropriate.
Your final directory structure should look like this:
>tree
├───build
│ ├───doctrees
│ └───html
│ ├───_sources
│ └───_static
├───mycode
│ └───__pycache__
└───source
├───_static
└───_templates
Let's add a little more functionality to this quickstart. Suppose we have a file foo.rst that contains documentation we want to include as well. Then we can add foo.rst and make sure it is documented by adding a reference to foo in index.rst:
source\foo.rst
foo module
==========
This is the foo module description.
.. note::
This is a note.
source\index.rst (changed part in red)
.. toctree::
:maxdepth: 2
:caption: Contents:
foo
.. automodule:: myclasses
:members:
Your final directory structure should look like this:
>tree
├───build
│ ├───doctrees
│ └───html
│ ├───_sources
│ └───_static
├───mycode
│ └───__pycache__
└───source
├───_static
└───_templates
reStructuredText
Let's add a little more functionality to this quickstart. Suppose we have a file foo.rst that contains documentation we want to include as well. Then we can add foo.rst and make sure it is documented by adding a reference to foo in index.rst:
source\foo.rst
foo module
==========
This is the foo module description.
.. note::
This is a note.
source\index.rst (changed part in red)
.. toctree::
:maxdepth: 2
:caption: Contents:
foo
.. automodule:: myclasses
:members:
The syntax you can use inside of foo.rst is described in Sphinx reStructuredText. At this point in our quickstart, we have HTML generated documentation with some content coming from reStructuredText in an .rst file and some content coming from reStructuredText in docstrings in .py files.
Build the docs again:
> make html
Notice that "foo" appears in doc contents.
If interested, go to the next post in the series: From Sphinx to DocFX - Generating Python API Documentation with DocFx.
Build the docs again:
> make html
Notice that "foo" appears in doc contents.
If interested, go to the next post in the series: From Sphinx to DocFX - Generating Python API Documentation with DocFx.
No comments:
Post a Comment
All comments go through a moderation process. Even though it may not look like the comment was accepted, it probably was. Check back in a day if you asked a question. Thanks!