Autodoc can't find your modules, because they are not in sys.path
.
You have to include the path to your modules in in the sys.path
in your conf.py
.
Look at the top of your conf.py
(just after the import of sys
), there is a sys.path.insert()
statement, which you can adapt.
By the way: you can use the Makefile
created by Sphinx to create your documentation.
Just call
make
to see the options.
If something went wrong before try:
make clean
before running make html
.
It sounds like os.path.append()
is working OK for folks, but if you follow the conf.py
template, you would insert the module path to the front of sys.path
using os.path.insert(0, ...)
, and just add an extra .
import os
import sys
sys.path.insert(0, os.path.abspath('..'))
If you have setup your sphinx
project to use separate build
and source
directories, that call should instead be:
sys.path.insert(0, os.path.abspath('../..'))
To run python code, the python interpreter needs to know where it is. With the sphinx config being a python script, it's location needs to be made known, which is done by adding it the the sys.path
variable using the insert method (see the docs on module search path).
The path added to sys.path
in this case is a "relative" path, which is specified using dots. This is a general way of specifying the path, which allows the code to be moved and still point correctly to the correct path in your codebase.
.
- current path of the conf.py
..
- parent path of the conf.py
../..
- parent of the parent path, etc.
I use linux, so directories are specified with a forward slash, but a cross-platform method for specifying parent directories can be acheived with pathlib
.
from pathlib import Path
parent = Path(__file__).parent
parents_parent = Path(__file__).parents[1]
in conf.py
just add the path to your project folder.
sys.path.append('/home/workspace/myproj/myproj')
If
__init__.py
is placed correctlyand your autodoc still cannot find the modules...
It may be because the dependencies of those modules are not satisfied under your python environment. You will want to check if all the import statements are working within the modules.
I don't know why (maybe in my case autodoc couldn't install my package), but I always got module-not-found
errors until I explicitly included all directories containing modules to the path.
For the following example folder structure
project_dir
|- setup.py
|- src
| |- __init__.py
| |- source1.py
| |- sub_project
| |- __init__.py
| |- source2.py
|- docs
|- conf.py
|- source
| |- index.rst
|- _build
I included
for x in os.walk('../../src'):
sys.path.insert(0, x[0])
to the beginning of conf.py
such that all involved directories would be added.
I think I did this the first time I tried to add a file to the toctree. I think it was because I left out the blank line between the :maxdepth line and the file name.
.. Animatrix Concepts documentation master file, created by
sphinx-quickstart on Thu Mar 22 18:06:15 2012.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Welcome to Animatrix Concepts documentation!
============================================
Contents:
.. toctree::
:maxdepth: 2
stuff
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
Above is my index.rst file. stuff.rst resides in the same directory as it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With