Documenter son projet avec Sphinx

PyConFR 2025 - 1 novembre 2025

Françoise CONIL, Ingénieure d’études CNRS, Laboratoire LIRIS Lyon

Présentation

Sphinx est le logiciel de documentation historique de la communauté Python

Description

La communauté est active sur Sphinx

Évolution du nombre de stars GitHub 3

Installation

Il est fortement recommandé d’installer Sphinx dans un environnement isolé des packages systèmes

Installation dans un environnement virtuel

Avec pip 1 et venv

  1. Création et activation du virtualenv
$ python3 -m venv .venv
$ source .venv/bin/activate
$ pip install --upgrade pip setuptools wheel
  1. Installation de Sphinx
$ pip install sphinx

Avec uv

  1. Création et activation du virtualenv
$ uv venv
Using CPython 3.13.5
Creating virtual environment at: .venv
$ source .venv/bin/activate
  1. Installation de Sphinx
$ uv pip install sphinx

Important

La version de Sphinx qui sera installée par pip sera beaucoup plus récente que la version disponible dans vos paquets système.

Création de la documentation

Création du projet : sphinx-quickstart

Génération de la structure de la documentation avec la commande sphinx-quickstart

  • docs : le dossier de la documentation
  • --sep : séparer la documentation générée (HTML) des sources

Les sources sont au format reStructuredText (.rst) par défaut.

$ sphinx-quickstart --sep docs
Chemin racine sélectionné : docs

> Nom du projet: Conference schedules
> Nom(s) de(s) l'auteur(s): Françoise Conil
> Version du projet []: 0.0.1
> Langue du projet [en]: fr

Fichier en cours de création …

Terminé : la structure initiale a été créée.
Vous devez maintenant compléter votre fichier principal …/conference-schedules/docs/source/index.rst

et créer d'autres fichiers sources de documentation. Utilisez le Makefile pour construire la documentation comme ceci :
   make builder
 « builder » est l'un des constructeurs disponibles, tel que html, latex, ou linkcheck.

Structure générée

docs
├── build
├── make.bat
├── Makefile
└── source
    ├── conf.py
    ├── index.rst
    ├── _static
    └── _templates
  • le dossier source contient la configuration (conf.py) et le fichier racine de la documentation (index.rst)
  • les dossiers _static et _templates servent à personnaliser le rendu
  • les fichiers Makefile et make.bat facilitent la génération de la documentation
  • le dossier build contiendra la documentation générée (HTML, …)

Tip

Pour conserver les dossiers build, _static et _templates, initialement vides, ajouter à git un fichier .gitignore dans chacun de ces dossiers.

Fichier de configuration

Le fichier de configuration généré est un fichier Python : conf.py 1

# Configuration file for the Sphinx documentation builder.
project = 'Conference schedules'
copyright = '2025, Françoise Conil'
author = 'Françoise Conil'
release = '0.0.1'

# -- General configuration ---------------------------------------------------
extensions = []
templates_path = ['_templates']
exclude_patterns = []
language = 'fr'

# -- Options for HTML output -------------------------------------------------
html_theme = 'alabaster'
html_static_path = ['_static']

Fichier racine de la documentation

Le fichier racine généré est un fichier reStructuredText : index.rst

  • un commentaire introduit par un explicit marker : .. suivi par un espace
  • le titre de la documentation : « Conference schedules documentation »
  • un paragraphe avec un lien vers la présentation Sphinx de la syntaxe reStructuredText et de ses ajouts
  • la génération de la table des matières par la directive toctree
.. Conference schedules documentation master file, created by sphinx-quickstart …

Conference schedules documentation
==================================

Add your content using ``reStructuredText`` syntax. See the
`reStructuredText <https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html>`_
documentation for details.

.. toctree::
   :maxdepth: 2
   :caption: Contents:

Table des matières

toctree est une directive Sphinx qui permet de créer des liens entre vos documents et de générer une table des matières.

.. toctree::
   :maxdepth: 2

   getting-started
   conferences
   API Reference <api/conference-schedules>
  • saisir le chemin sources sans l’extension .rst

    • chemin absolu : commence par slash, /, et est relatif au dossier source de la documentation
    • chemin relatif : relatif au document
  • l’option maxdepth indique la profondeur.
    2 niveaux de titres : le titre du document et ses titres de niveau 1

Générer la documentation : make

Le Makefile facilite la génération de la documentation.

Il est basé sur la commande sphinx-build 1.

make html : génère la documentation sous forme de pages HTML.

$ make html
Sphinx v8.2.3 en cours d'exécution
...
La compilation a réussi.

Les pages HTML sont dans build/html.

make clean : supprime le contenu du dossier destination.

$ make clean
Removing everything under 'build'...

Enrichir la documentation

Ajouter des pages

On a peut créer une arborescence pour organiser ses sources.

# Arborescence

source/
├── index.rst
├── getting-started.rst
├── conferences.rst
├── conferences
│   ├── pyconfr.rst
│   └── pyladiescon.rst
.. Fichier index.rst

Conference schedules
====================

.. toctree::
   :maxdepth: 2
   :caption: Contents:

   getting-started
   conferences
.. Fichier conferences.rst

================
Conferences list
================

.. toctree::
    :maxdepth: 1

    conferences/pyconfr
    conferences/pyladiescon

Note

On n’est pas obligé de morceler la table des matières, mais c’est pratique quand on a beaucoup de sources.

index.rst peut référencer directement les fichiers conferences/pyconfr.rst et conferences/pyladiescon.rst.

Utiliser des images

La directive image est une directive reStructuredText.

Le chemin du fichier image, dans la directive, peut être relatif à l’emplacement du fichier reStructuredText qui référence l’image ou absolu comme ci-dessous.

# Arborescence

source/
├── conferences.rst
├── conferences
│   ├── pyconfr.rst
│   └── pyladiescon.rst
├── images
│   ├── logo-pyconfr-2025.svg
│   └── logo-pyladiescon.svg
.. Fichier `pyconfr.rst`

============
PyConFR 2025
============

`PyConFR`_ is a four-day conference is free, entirely coordinated by volunteers
and dedicated to bringing together people interested by the Python programming
language.

.. image:: /images/logo-pyconfr-2025.svg

.. _PyConFR: https://www.pycon.fr

Note

Je place mes images dans un dossier source/images (habitude). Vous pouvez placer vos images au même endroit que vos fichiers reStruturedText pour simplifier le chemin.

Référencer 1/2

Plusieurs types de références permettent de créer des liens vers des éléments de la documentation ou vers des éléments extérieurs 1.

  • le role :doc: permet de référencer une page source avec un chemin (relatif ou absolu)
.. Fichier lifecycle.rst (documentation framework Flask)

When you are done with development, use a production server to serve your application, see :doc:`deploying/index`.
  • le role :download: permet de référencer un fichier à télécharger 2
.. only:: builder_html

    :download:`Sphinx presentation at PyConFR <../documents/documenter-avec-sphinx_pyconfr-2025.pdf>`
.. Fichier lifecycle.rst

Regardless of what server you're using, it will follow the :pep:`3333` WSGI spec.

Référencer 2/2

  • le role :ref: permet de référencer un emplacement arbitraire …
.. Fichier signals.rst

See :ref:`core-signals-list` for a list of all built-in signals.

… pour lequel il faut définir une étiquette reStructuredText, globalement référençable :

.. Fichier api.rst

.. _core-signals-list:

Signals
-------

Signals are provided by the `Blinker`_ library.
.. Fichier developer/nxeps/nxep-0004.rst

According to :external+neps:doc:`NEP19 <nep-0019-rng-policy>`, …
and :external+numpy:doc:`improved performance <reference/random/performance>`.

Publication en ligne

Publier sur un serveur Web

Il suffit de copier les fichiers HTML générés dans le dossier build/html sur le serveur Web.

$ rsync -aCzv --delete --delete-after --exclude=.htaccess --exclude=.git --exclude=.buildinfo …/build/html/
mon_login@mon.serveur.fr:<chemin du serveur>/conference-schedules/

Read the Docs : plateforme d’hébergement

Read the Docs est la plateforme d’hébergement de référence pour les documentations Python.

  • la version communauté est gratuite pour les projets libres et les communautés
  • Read the Docs permet l'hébergement de multiples versions de la documentation, en plusieurs langues
  • plusieurs outils de documentation sont utilisables : Sphinx, MkDocs, Jupyter Book
  • suivre le tutoriel Read the Docs pour un guide pas à pas à partir d’un template de projet

Quelques informations

Créée en 2010, le code de la plateforme est open source avec ~460 contributeurices.

Read the Docs héberge 80 000 projets open source, sert 55 millions de pages et 40 TB de documentation par mois. Il a 100 000 utilisateurs avec une équipe salariée de seulement 4 personnes.

Voir les comparaisons de Read the Docs avec d’autres plateformes : GitHub Pages, GitBook, Cloudflare Pages et Netlify

Read the Docs : fonctionnement

Read the Docs recommande de s’authentifier à partir d’une plateforme d’hébergement de code (GitHub, GitLab, Bitbucket) plutôt que par email / mot de passe.

La génération de la documentation est déclenchée par l’hébergeur Git via un webhook dont on paramétre le déclenchement :

Read the Docs : fichier de configuration

Vous devez placer un fichier de configuration, nommé .readthedocs.yaml, à la racine de votre dépôt git pour configurer la génération de la documentation sur la plateforme.

# Exemple de fichier de configuration de la librairie ntt : https://ntt.readthedocs.io/

version: 2

# Set the OS, Python version and other tools you might need
build:
  os: ubuntu-22.04
  tools:
    python: "3.9"

  jobs:
    pre_build:
      - sphinx-apidoc -f -T -d 2 -M -o docs/source/api src/ntt

sphinx:
   configuration: docs/source/conf.py

# To install the project itself as a Python package using pip
# https://docs.readthedocs.io/en/stable/config-file/v2.html#packages
python:
  install:
    - method: pip
      path: .
      extra_requirements:
        - dev

Description des éléments du fichier .readthedocs.yaml

  • build.os : spécifie l’image Docker à utiliser pour la documentation (choix entre 2 versions d’une Ubuntu LTS)
  • build.tools.python : spécifie quel interpréteur Python utiliser
  • build.jobs : spécifie des commandes à exécuter avant ou après l’exécution des tâches de compilation Read the Docs.
  • python.install : spécifie comment installer le package documenté et/ou des “requirements”

Pour plus de détails, consulter les documentations Read the Docs suivantes :

Intégrer la documentation du code

Intégrer des extraits de code

code-block est une directive Sphinx qui permet d’insérer une portion de code avec une coloration syntaxique spécifiée par un lexer, ici « python » :

Exemple de camembert avec matplotlib :

.. code-block:: python
    :caption: matplotlib ax.pie() example
    :linenos:
    :emphasize-lines: 7

    import matplotlib.pyplot as plt

    labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
    sizes = [15, 30, 45, 10]

    fig, ax = plt.subplots()
    ax.pie(sizes, labels=labels)

Rendu :

La directive code-block dispose de plusieurs options, dont :

  • caption : titre
  • linenos : numéroter les lignes
  • emphasize-lines : mettre des lignes en surbrillance

Coloration syntaxique : Pygments

Pygments est la librairie Python qui réalise la coloration syntaxique de code.

Pygments supporte 598 langages / format.

$ pygmentize -L
Pygments version 2.19.2, (c) 2006-2024 by Georg Brandl,
Matthäus Chajdas and contributors.
* pycon, python-console:
    Python console session 
* pytb, py3tb:
    Python Traceback (filenames *.pytb, *.py3tb)
* python, py, sage, python3, py3, bazel, starlark, pyi:
    Python (filenames *.py, *.pyw, *.pyi, *.jy, *.sage, 
    *.sc, SConstruct, SConscript, *.bzl, BUCK, BUILD, 
    BUILD.bazel, WORKSPACE, *.tac)

On peut créer un lexer si besoin.

Le style d’affichage de la section de code change selon les thèmes.

Utilisation du lexer python-console :

.. code-block:: pycon

    >>> import pygments.styles
    >>> styles = list(pygments.styles.get_all_styles())
    >>> styles
    ['abap', 'algol', 'algol_nu', 'arduino', 'autumn', …]

Rendu avec le thème bizstyle :

Rendu avec le thème Read the Docs :

Docstrings : description

Les Docstrings (documentations strings) sont des chaînes de caractères particulières qui permettent de documenter le code 1.

  • la Docstring d’un objet est stockée dans l’attribut __doc__ de cet objet 2 (package, module, classe, fonction, …)
  • elle est utilisable pour afficher de l’aide, pour exécuter des tests avec le module doctest
  • Sphinx peut intégrer des Docstrings, les utiliser pour générer une documentation d’API, …

Docstrings : formats

Plusieurs formats de Docstring sont supportés pour décrire les arguments, les types et les valeurs de retour 1.

Format reStructuredText / Sphinx

Une explication brève de la syntaxe se trouve dans la description du « domain Python » dans la documentation Sphinx :

Formats Google et NumPy

L’extension nsphinx.ext.napoleon est nécessaire pour le support des Docstrings aux formats Google ou NumPy.

sphinx.ext.autodoc

L’extension autodoc 1 ajoute plusieurs directives pour extraire et intégrer les Docstrings

.. automodule::   => documenter un module
.. autoclass::    => documenter une classe
.. autofunction:: => documenter une fonction

Extraire et insérer la Docstring d’une fonction :

Extraction d'une **trame vidéo** :

.. autofunction:: ntt.frames.frame_extraction.extract_last_frame
   :no-index:

Syntaxe #: pour documenter les variables des modules ou les attributs de classe 2 :

class Foo:
    """Docstring for class Foo."""
    
    flox = 1.5   #: Doc comment for Foo.flox. One line only.

sphinx-apidoc

La commande sphinx-apidoc 1 permet de générer une documentation complète d’API à l’aide des directives autodoc :

$ sphinx-apidoc -f -T -d 2 -M -o docs/source/api src/ntt
$ ls -1 source/api/
ntt.draw.rst
ntt.frames.rst
ntt.rst
...
  • -f : Force overwriting of any existing generated files
  • -T : Do not create a table of contents file 2
  • -d 2 : Maximum depth for the generated table of contents file
  • -M : Put module documentation before submodule documentation
  • -o : Directory to place the output files
  • src/ntt : path to a Python package to document

Quelques extensions Sphinx

Extensions intégrées

Sphinx intègre une vingtaine d’extensions qui sont préfixées par sphinx.ext. 1

Il suffit de déclarer les extensions dans le fichier conf.py pour les utiliser :

extensions = ['sphinx.ext.autodoc',
              'sphinx.ext.napoleon',
              'sphinx.ext.autosectionlabel',
              'sphinx.ext.intersphinx']

Rappel

sphinx.ext.intersphinx

intersphinx permet de faire des références vers des documentations externes :

  • explicitement avec le role :external:
  • implicitement quand une référence n’est pas trouvée

Définir les documentations externes dans le dictionnaire intersphinx_mapping :

.. Fichier conf.py

intersphinx_mapping = {
        'pandas': ('https://pandas.pydata.org/pandas-docs/stable/', None),
        'pytest': ('https://pytest.org/en/stable/', None),
        'python': ('https://docs.python.org/3', None),
        }

Ajouter des références 1 vers les différentes documentations, par exemple :

Voir :external:ref:`re-syntax` pour la syntaxe des expressions régulières en Python.

Voir comment utiliser les :external+pytest:doc:`fixtures pytest <how-to/fixtures>`

Voir la documentation de la fonction :external+pandas:py:func:`pandas.read_csv`

sphinx.ext.autosectionlabel

autosectionlabel permet de générer des références pour chaque titre.

:program:`csvlook` est une commande des utilitaires :ref:`outils/outils_csv:csvkit`.

autosectionlabel_maxdepth définit le niveau de titres pour lesquels une référence est générée.

Conflits

autosectionlabel peut générer de nombreux warnings si on a des titres identiques dans un document et que l’on ne se contente pas des titres de niveau 1.

Mermaid

Mermaid permet de générer des diagrammes et des graphiques à partir de descriptions textuelles.

Installation de l’extension Sphinx :

$ pip install sphinxcontrib-mermaid

Instructions dans conf.py :

extensions = ['sphinxcontrib.mermaid']
mermaid_init_js = """mermaid.initialize({
    startOnLoad: true,
    sequence: {showSequenceNumbers: true}
});"""

Exemple de diagramme de séquence

.. mermaid::

    sequenceDiagram
        autonumber
        Bob->>Alice: Authentication Request
        Alice->>Bob: Authentication Response

        Bob->>Alice: dummy

        Bob->>Alice: Yet another authentication Request
        Alice->>Bob: Yet another authentication Response

        Bob->>Alice: dummy

PlantUML

PlantUML est un autre outil de génération de diagrammes à partir de descriptions textuelles. Il nécessite Java, Graphviz et le jar PlantUML 1.

Installation de l’extension Sphinx :

$ pip install sphinxcontrib-plantuml

Instructions dans conf.py :

extensions = ['sphinxcontrib.plantuml']
local_plantuml_path = os.path.join(os.path.dirname(__file__), 
           "utils", "plantuml-lgpl-1.2025.9.jar")
plantuml = f"java -Djava.awt.headless=true -jar {local_plantuml_path}"

Exemple de diagramme de séquence

.. uml::

    !theme aws-orange
    autonumber 10 10 "<b>[000]"

    Bob -> Alice : Authentication Request
    Bob <- Alice : Authentication Response

    Bob -> Alice : dummy

    Bob -> Alice : Yet another authentication Request
    Bob <- Alice : Yet another authentication Response

    Bob -> Alice : dummy

Autres extensions

Quelques listes d’extensions tierces citées dans la documentation Sphinx :

awesome-sphinxdoc liste des extensions mais de nombreuses extensions sont obsolètes

sphinx-lint

sphinx-lint 1 est un utilitaire, un linter, pour détecter les erreurs de syntaxe reStructuredText.

Installation :

$ pip install sphinx-lint

On peut exécuter sphinx-lint sur un fichier, un dossier :

$ sphinx-lint news.rst
news.rst:4043: role missing opening tag colon ( issue:`). (missing-space-before-role)
news.rst:275: trailing whitespace (trailing-whitespace)

On peut intégrer sphinx-lint à un hook de pre-commit git 2.

# Extrait du fichier .pre-commit-config.yaml

  - repo: https://github.com/sphinx-contrib/sphinx-lint
    rev: v1.0.0
    hooks:
      - id: sphinx-lint
        args: [--enable=default-role]
        files: ^Doc/|^Misc/NEWS.d/

Quelques thèmes HTML

Un thème est un ensemble de templates, de stylesheet(s) et de fichiers statiques qui permettent de changer l’apparence de la documentation HTML.

Thèmes intégrés

Sphinx utilise le thème alabaster par défaut et intègre 9 autres thèmes 1 2.

Il suffit de déclarer le thème à utiliser avec la variable html_theme dans le fichier de configuration conf.py.

# Fichier conf.py
html_theme = 'alabaster'

# Fichier conf.py
html_theme = 'bizstyle'

Thèmes Read the Docs et Furo

Des thèmes complémentaires sont présentés sur le site sphinx-themes.org. Pour utiliser un de ces thèmes, il faut installer le package du thème au préalable.

Installation du thème Read the Docs par pip

$ pip install sphinx-rtd-theme

Déclaration du thème dans conf.py

html_theme = 'sphinx_rtd_theme'

Installation du thème Furo par pip

$ pip install furo

Déclaration du thème dans conf.py

html_theme = 'furo'

Extension Sphinx Design

sphinx{design} apporte plusieurs composants d’interface utilisateur qui améliorent le rendu visuel : grids, cards, dropdowns, tabs, badges and button-links et icons.

Installation de l’extension Sphinx :

$ pip install sphinx-design

Déclaration dans le fichier conf.py :

extensions = [ 'sphinx_design']

Exemple de card et de tab avec le thème Read the Docs

Thème PyData

Le thème PyData, basé sur Bootstrap, permet une présentation plus riche 1.

Installation du thème PyData par pip

$ pip install pydata-sphinx-theme

Déclaration du thème dans conf.py

html_theme = 'pydata_sphinx_theme'

Options de configuration HTML

Plusieurs options existent pour configurer la sortie HTML dans le fichier conf.py :

Option HTML Exemple Description
html_theme pydata_sphinx_theme Identifiant du thème à utiliser
html_logo 'images/logo_liris.png' Logo de la documentation
html_css_files ['custom.css'] Liste de fichiers de styles
html_last_updated_fmt '%d/%m/%Y' basé sur time.strftime

La variable html_theme_options est utilisée pour les options spécifiques des thèmes :

# https://github.com/openforis/sepal-doc/blob/main/docs/source/conf.py

html_theme_options = { …
    "use_edit_page_button": True,
    "article_footer_items": ["last-updated"],
    "footer_start": ["copyright", "sphinx-version", "licence"],
    … }

La variable html_context permet de configurer l’ajout d’un lien “Edit Source” pour accéder au code source depuis la documentation d’API sur Read the Docs :

html_context = {
    "display_github": True, # Integrate GitHub
    "github_user": "MyUserName", # Username
    "github_repo": "MyDoc", # Repo name
    … }

Markdown et MyST

MyST (Markedly Structured Text) est une extension de CommonMark dont la syntaxe est enrichie pour permettre l’écriture de documentations techniques et l’intégration avec Docutils et Sphinx.

Intégration dans Sphinx

Sphinx peut intégrer des pages Markdown avec l’extension MyST-Parser.

Installation de l’extension Sphinx :

$ pip install myst-parser

Déclaration dans le fichier conf.py :

extensions = ['myst_parser']

Les fichiers .md sont alors parsés avec MyST.

  1. Configuration globale des extensions de syntaxe avec la variable myst_enable_extensions
myst_enable_extensions = [
    "colon_fence",
    "tasklist"
]
  1. Configuration locale des extensions de syntaxe dans l’en-tête YAML (Frontmatter) des pages Markdown
---
myst:
  enable_extensions: ["colon_fence", "tasklist"]
---

Directives et roles

MyST 1

Directives

```{directivename} arguments
:key1: val1
:key2: val2

This is
directive content
```

reStructuredText

Directives 2

.. directivename:: arguments
   :key1: val1
   :key2: val2

   This is
   directive content

Roles 3

{role-name}`role content`

Exemple

{math}`a^2 + b^2 = c^2`

Roles

:role-name:`role content`

Exemple

:math:`a^2 + b^2 = c^2`

Mise en oeuvre

Directive code-block :

```{code-block} python
:lineno-start: 10
:emphasize-lines: 1, 3

a = 2
print('my 1st line')
print(f'my {a}nd line')
```

Avec l’extension sphinx{design} :

:::{card} Carte `sphinx{design}`
:img-background: _static/particle_background.jpg
:class-card: sd-text-black
:img-alt: my text

Contenu de la carte
:::

« Admonitions » reStructuredText :

:::{admonition} Configuration locale
:class: tip

Il est possible de configurer les extensions de syntaxe MyST **localement**
avec le `Frontmatter`.
:::

Lien vers une page avec le rôle doc :

Voir {doc}`mermaid-diagrams`

Lien vers une spécification avec le rôle pep :

Voir la {pep}`440` sur les identifiants de version

Expression mathématique avec le rôle math :

{math}`y = ax^2 + bx + c`

Warning

La syntaxe :::{directive} nécessite la déclaration de l’extension colon_fence dans la configuration locale ou globale.

Conclusion

Sphinx : un outil riche pour la documentation technique

  1. Installez Sphinx dans un environnement virtuel
  2. Générez la structure du projet avec sphinx-quickstart
  3. Ajoutez du contenu
  4. Intégrez la documentation du code
  5. Adoptez le thème de votre choix
  6. Enrichissez votre documentation à l’aide des nombreuses extensions
  7. Si vous voulez utiliser du Markdown, passez à MyST

Et si vous voulez maîtriser Sphinx et reStructuredText, n’hésitez pas à contribuer à la traduction de la documentation python

Aller plus loin

Autres ressources

Diátaxis

Read the Docs recommande la méthodologie Diátaxis pour architecturer la documentation.

Versions de documentation

Un projet peut avoir plusieurs versions de documentations sur Read the Docs 1.

$ git tag -a 0.1.0 -m "First step reached - PlantUML activated on Read the Docs"

$ git push origin --tags
Énumération des objets: 1, fait.
Décompte des objets: 100% (1/1), fait.
Écriture des objets: 100% (1/1), 206 octets | 206.00 Kio/s, fait.
Total 1 (delta 0), réutilisés 0 (delta 0), réutilisés du pack 0
To github.com:fconil/Sphinx-with-PlantUML-on-RTD.git
 * [new tag]         0.1.0 -> 0.1.0

Suppression de warnings

J’ai testé la suppression des warnings, trop nombreux, sur la coloration syntaxique de code.

J’ai déclaré la variable suppress_warnings dans le fichier de configuration conf.py :

# A list of warning types to suppress arbitrary warning messages.

suppress_warnings = ['misc.highlighting_failure']

Consulter la documentation Sphinx pour découvrir les valeurs possibles pour la désactivation de warnings.

Internationalisation

À étudier

Je n’ai pas eu à le faire mais c’est un aspect que je souhaite mettre en oeuvre.

Internationalization

Créer une extension Sphinx

Je suis tombée par hasard sur l’article The Power of Sphinx: Integrating Jinja with RST, à partir d’un lien dans le code de la documentation CircuitPython

À étudier

Utilisation avec d’autres langages de programmation

Sphinx est utilisé par des projets écrits dans d’autres langages. Peut-être plus des langages historiques comme C, C++, … Par exemple :

Les domaines Sphinx, rassemblent les directives et les roles spécifiques à un langage.

Par défaut, Sphinx propose les domaines C, C++, JavaScript, Mathematics, Python et reStructuredText

.. c:function:: void hook_register(name, int (*callback)(...))
.. c:macro:: `LV_COLOR_DEPTH` ``8``: 3 x image width x image height

.. cpp:class:: template<K> nsTHashSet<K>
.. cpp:function:: V& LookupOrInsert(KeyType aKey, Args&&... aArgs) const
.. cpp:type:: std::vector<int> List

.. js:module:: RhinoCompute
.. js:function:: RhinoCompute.Extrusion.getWireframe(thisExtrusion, multiple=false)
.. py:module:: torch.nn.modules.container
.. py:exception:: XlsxWriterException

.. math:: e^{i\pi} + 1 = 0

.. rst:directive:: toctree

Annexes

Installation packagée

La documentation d’installation commence par présenter une installation globale de Sphinx avec les systèmes de packages (apt 1, yum, brew, chocolatey, …).

Warning

Une application packagée sera beaucoup plus ancienne que celle que vous pourriez installer par pip

Installation globale sur une Ubuntu LTS 22.04 en 2024

$ sphinx-quickstart --version
sphinx-quickstart 4.3.2

Installation avec pip dans un environnement virtuel sur le même OS

$ sphinx-quickstart --version
sphinx-quickstart 7.2.6

Générer la documentation : sphinx-build

sphinx-build 1 est la commande de génération de la documentation.

$ sphinx-build -M html source build
Sphinx v8.2.3 en cours d'exécution
...

-M est une option récente, le résultat équivaut à la commande suivante avec l’ancienne option -b

$ sphinx-build -b html source build/html -d build/doctrees

Docstrings : affichage

Aide dans le REPL Python

>>> import pandas
>>> help(pandas.date_range)

Même aide affichée avec
le module pydoc

$ python -m pydoc pandas.date_range
Help on function date_range in module pandas.core.indexes.datetimes:

date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize: 'bool' = False, name: 'Hashable | None' = None, inclusive: 'IntervalClosedType' = 'both', *, unit: 'str | None' = None, **kwargs) -> 'DatetimeIndex'
    Return a fixed frequency DatetimeIndex.
    …


Aide dans le REPL iPython

# Aide dans le REPL iPython
In [2]: import pandas
In [3]: pandas.date_range?
Signature:
pandas.date_range(
    start=None,
    end=None,
    periods=None,
    freq=None,
    tz=None,
    normalize: 'bool' = False,
    name: 'Hashable | None' = None,
    inclusive: 'IntervalClosedType' = 'both',
    *,
    unit: 'str | None' = None,
    **kwargs,
) -> 'DatetimeIndex'
Docstring:
Return a fixed frequency DatetimeIndex.
…

Docstrings : format reStructuredText / Sphinx

Le format reStructuredText / Sphinx est le format par défaut de Sphinx 1

def extract_last_frame(
    video_path_in: str, video_name_in: str, frame_path_out: str, frame_name_out: str
) -> str:
    """Extracts the last frame of a given video.

    :param str video_path_in: path to the folder conataining the input video
    :param str video_name_in: name of the input video
    :param str frame_path_out: path to the folder conataining the output frame
    :param str frame_name_out: name of the output frame
    :return str: full path of the output frame
    """
    pass

Docstrings : format Google

Le format Google est souvent considéré comme le plus lisible.

def extract_last_frame(
    video_path_in: str, video_name_in: str, frame_path_out: str, frame_name_out: str
) -> str:
    """Extracts the last frame of a given video.

    Args:
        video_path_in (str): path to the folder conataining the input video
        video_name_in (str): name of the input video
        frame_path_out (str): path to the folder conataining the output frame
        frame_name_out (str): name of the output frame

    Returns:
        str: full path of the output frame
    """
    pass

Le format Google est le format par défaut du plugin autoDocstring.

Docstrings : format NumPy

Le format NumPy est un format fréquemment utilisé dans la communauté Calcul.

def extract_last_frame(
    video_path_in: str, video_name_in: str, frame_path_out: str, frame_name_out: str
) -> str:
    """Extracts the last frame of a given video.

    Parameters
    ----------
    video_path_in : str
        path to the folder conataining the input video
    video_name_in : str
        name of the input video
    frame_path_out : str
        path to the folder conataining the output frame
    frame_name_out : str
        name of the output frame

    Returns
    -------
    str
        full path of the output frame
    """
    pass

nbsphinx : résolution des warnings

⇨ L’ajout de nbsphinx_widgets_path = '' a supprimé le warning suivant :

Lecture des sources... [100%] notebooks/swim_stats
WARNING: nbsphinx_widgets_path not given and ipywidgets module unavailable

⇨ L’installation de ipywidgets (via pyproject.toml) a supprimé les warnings sur les différents notebook et le code dans les cellules est syntaxiquement coloré.

/home/fconil/AMIGO/dockerisation/ntt/docs/source/notebooks/Easing_effets_visuels_3.nblink:: WARNING: Le nom du l'analyseur Pygments 'ipython3' est inconnu
/home/fconil/AMIGO/dockerisation/ntt/docs/source/notebooks/draw_bbox_with_ntt.nblink:: WARNING: Le nom du l'analyseur Pygments 'ipython3' est inconnu
/home/fconil/AMIGO/dockerisation/ntt/docs/source/notebooks/draw_cycles_in_perspective.nblink:: WARNING: Le nom du l'analyseur Pygments 'ipython3' est inconnu

⇨ De nombreuses configurations continent nbsphinx_execute = 'never' 1 ce qui parait souhaitable.

Warning

Faut-il installer ipykernel, cf nbsphinx installation ? A priori, ça n’a pas semblé nécessaire pour les notebooks de ntt.

PlantUML : déploiement sur Read the Docs

Pour utiliser cette extension sur Read the Docs 1, voir les informations de l'issue 9958 2.

# Fichier .readthedocs.yaml

version: 2

build:
  os: ubuntu-22.04
  apt_packages:
    - default-jdk
    - graphviz
  tools:
    python: "3.10"

sphinx:
   configuration: docs/source/conf.py

python:
   install:
   - requirements: docs/requirements.txt
# Arborescence de la documentation

├── docs
│   ├── build
│   ├── make.bat
│   ├── Makefile
│   ├── requirements.txt
   └── source
       ├── conf.py
       ├── diagrams.rst
       ├── index.rst
       ├── mermaid-diagrams
       │   └── sequence-diagram.rst
       ├── plantuml-diagrams
       │   └── sequence-diagram.rst
       ├── references.rst
       ├── _static
       ├── _templates
       └── utils
           └── plantuml-lgpl-1.2024.4.jar
  • jar PlantUML téléchargé manuellement et placé dans le dépôt (pour le test)

Utilitaires MyST-Parser

L’extension MyST-Parser installe quelques utilitaires en ligne de commande 1

  • myst-anchors
  • myst-docutils-demo : génère le HTML du markdown parsé sur la sorite standard
  • myst-docutils-html
  • myst-docutils-html5
  • myst-docutils-latex
  • myst-docutils-pseudoxml
  • myst-docutils-xml
  • myst-inv