I have a project with this structure:
model_monitoring/
|-docs/
|-src/
| |-model_monitoring/
| |-class_name1/
| |-__init__.py
| |-class_name1.py
| |-class_name2/
| |-__init__.py
| |-class_name2.py
I have to make a documentaion about every class of this project (only the file __init__.py inside every folder). I'm using sphinx with autodoc, autosummary and napoleon extiension.
The problem, i think, is in the apidoc command, when i create the .rst file for every class. Then when i make the build it gives me a lot of errors related to missing module, like this:
- Failed to import data_drift.data_drift.
- Possible hints:
- ModuleNotFoundError: No module named 'data_drift'
- KeyError: 'data_drift'
- Failed to import data_drift.
- Possible hints:
- ModuleNotFoundError: No module named 'data_drift'
- KeyError: 'data_drift'Failed to import data_drift.data_drift.
- Possible hints:
- ModuleNotFoundError: No module named 'data_drift'
- KeyError: 'data_drift'
This error for every module.
The structure of the .rst files:
model\_monitoring.data\_drift package
=====================================
Submodules
----------
model\_monitoring.data\_drift.data\_drift module
------------------------------------------------
.. automodule:: model_monitoring.data_drift.data_drift
:members:
:undoc-members:
:show-inheritance:
Module contents
---------------
.. automodule:: model_monitoring.data_drift
:members:
:undoc-members:
:show-inheritance:
conf.py
import os
import sys
sys.path.insert(0, os.path.abspath('../src/model_monitoring/'))
project = 'Documentazione Model Monitoring'
copyright = '2025, Team AIS'
author = 'Team AIS'
release = '0.1'
extensions = ['sphinx.ext.autodoc','sphinx.ext.autosummary','sphinx.ext.napoleon']
templates_path = ['_templates']
exclude_patterns = []
html_theme = 'classic'
html_static_path = ['_static']
In _template/autosummary/ we have the 3 files:
module.rst
{{ fullname | escape | underline}}
.. automodule:: {{ fullname }}
{% block attributes %}
{% if attributes %}
.. rubric:: {{ _('Module Attributes') }}
.. autosummary::
:toctree: {{ fullname }}
:nosignatures:
{% for item in attributes %}
{{ item }}
{%- endfor %}
{% endif %}
{% endblock %}
{% block functions %}
{% if functions %}
.. rubric:: {{ _('Functions') }}
.. autosummary::
:toctree: {{ fullname }}
:nosignatures:
{% for item in functions %}
{{ item }}
{%- endfor %}
{% endif %}
{% endblock %}
{% block classes %}
{% if classes %}
.. rubric:: {{ _('Classes') }}
.. autosummary::
:toctree: {{ fullname }}
:nosignatures:
{% for item in classes %}
{{ item }}
{%- endfor %}
{% endif %}
{% endblock %}
{% block exceptions %}
{% if exceptions %}
.. rubric:: {{ _('Exceptions') }}
.. autosummary::
:toctree: {{ fullname }}
:nosignatures:
{% for item in exceptions %}
{{ item }}
{%- endfor %}
{% endif %}
{% endblock %}
{% block modules %}
{% if modules %}
.. rubric:: Modules
.. autosummary::
:toctree:
:recursive:
{% for item in modules %}
{{ item }}
{%- endfor %}
{% endif %}
{% endblock %}
class.rst
{{ fullname | escape | underline}}
.. currentmodule:: {{ module }}
.. autoclass:: {{ objname }}
{% block attributes %}
{% if attributes %}
.. rubric:: {{ _('Attributes') }}
.. autosummary::
{% for item in attributes %}
~{{ name }}.{{ item }}
{%- endfor %}
{% endif %}
{% endblock %}
{% block methods %}
{% if methods %}
.. rubric:: {{ _('Methods') }}
.. autosummary::
:toctree:
:nosignatures:
{% for item in methods %}
~{{ name }}.{{ item }}
{%- endfor %}
{% endif %}
{% endblock %}
base.rst
{{ fullname | escape | underline}}
.. currentmodule:: {{ module }}
.. auto{{ objtype }}:: {{ objname }}
I changed the configuration in conf.py, added manually every functions of the class in the clann_name.rst file and used 3 different files for template to autocreate the .rst files with no resolution of the problem.