PyConFR 2025 - 1 novembre 2025
Sphinx est le logiciel de documentation historique de la communauté Python
La communauté est active sur Sphinx

Évolution du nombre de stars GitHub 3

Il est fortement recommandé d’installer Sphinx dans un environnement isolé des packages systèmes
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.
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 sourcesLes 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
où « builder » est l'un des constructeurs disponibles, tel que html, latex, ou linkcheck.docs
├── build
├── make.bat
├── Makefile
└── source
├── conf.py
├── index.rst
├── _static
└── _templatessource contient la configuration (conf.py) et le fichier racine de la documentation (index.rst)_static et _templates servent à personnaliser le renduMakefile et make.bat facilitent la génération de la documentationbuild 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.
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']Le fichier racine généré est un fichier reStructuredText : index.rst
.. suivi par un espacetoctree.. 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: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.
saisir le chemin sources sans l’extension .rst
/, et est relatif au dossier source de la documentationl’option maxdepth indique la profondeur.
2 niveaux de titres : le titre du document et ses titres de niveau 1
Le Makefile facilite la génération de la documentation.
Il est basé sur la commande sphinx-build 1.
On a peut créer une arborescence pour organiser ses sources.
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.
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.
.. 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.frNote
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.
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.
.. Fichier lifecycle.rst (documentation framework Flask)
When you are done with development, use a production server to serve your application, see :doc:`deploying/index`.: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>`:pep: est un role standard reStructuredText qui permet d’insérer un lien vers une spécification Python:ref: permet de référencer un emplacement arbitraire …… 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.Il suffit de copier les fichiers HTML générés dans le dossier build/html sur le serveur Web.
Read the Docs est la plateforme d’hébergement de référence pour les documentations Python.
Sphinx, MkDocs, Jupyter BookQuelques 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 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 :


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:
- devDescription des éléments du fichier .readthedocs.yaml
Pour plus de détails, consulter les documentations Read the Docs suivantes :
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 » :
Rendu :

La directive code-block dispose de plusieurs options, dont :
caption : titrelinenos : numéroter les lignesemphasize-lines : mettre des lignes en surbrillancePygments 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.
Les Docstrings (documentations strings) sont des chaînes de caractères particulières qui permettent de documenter le code 1.
Docstring d’un objet est stockée dans l’attribut __doc__ de cet objet 2 (package, module, classe, fonction, …)Docstrings, les utiliser pour générer une documentation d’API, …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.
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 fonctionExtraire 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 :
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 filessrc/ntt : path to a Python package to documentSphinx 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.autodoc permet d’extraire et d’intégrer les Docstrings du codesphinx.ext.napoleon permet le support des Docstrings au format Google ou NumPyintersphinx permet de faire des références vers des documentations externes :
:external: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 :
autosectionlabel permet de générer des références pour chaque titre.
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.
nbsphinx est un parseur de fichiers .ipynb qui permet l’intégration de notebooks Jupyter 1.
nbsphinx-link permet d’inclure des notebooks qui ne sont pas dans le dossier des « sources ».
Installation des extensions Sphinx :
Déclaration dans conf.py :
Insérer le chemin des notebooks sans l’extension .ipynb :

Warning
Les fichiers .ipynb qui ne contiennent pas la sortie des cellules sont automatiquement exécutés lors de la compilation Sphinx (désactivable).
Mermaid permet de générer des diagrammes et des graphiques à partir de descriptions textuelles.
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.
Exemple de diagramme de séquence

Sphinx-Gallery permet de créer des “galeries HTML” à partir de code Python.
Exemple NetworkX
Note
Extension utilisée par matplotlib, NetworkX, scikit-learn, …
Voir le Getting started et son projet exemple.

Quelques listes d’extensions tierces citées dans la documentation Sphinx :
Best Sphinx extensions list est une liste sélective d’extensions :
sphinx-lint 1 est un utilitaire, un linter, pour détecter les erreurs de syntaxe reStructuredText.
Installation :
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.
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.
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.
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.
sphinx{design} apporte plusieurs composants d’interface utilisateur qui améliorent le rendu visuel : grids, cards, dropdowns, tabs, badges and button-links et icons.
Le thème PyData, basé sur Bootstrap, permet une présentation plus riche 1.
Installation du thème PyData par pip
Déclaration du thème dans conf.py

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 :
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.
Sphinx peut intégrer des pages Markdown avec l’extension MyST-Parser.
Installation de l’extension Sphinx :
Déclaration dans le fichier conf.py :
Les fichiers .md sont alors parsés avec MyST.
myst_enable_extensionsFrontmatter) des pages MarkdownDirective 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} :
« 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 :
Lien vers une spécification avec le rôle pep :
Expression mathématique avec le rôle math :
Warning
La syntaxe :::{directive} nécessite la déclaration de l’extension colon_fence dans la configuration locale ou globale.
sphinx-quickstart
Et si vous voulez maîtriser Sphinx et reStructuredText, n’hésitez pas à contribuer à la traduction de la documentation python
Read the Docs recommande la méthodologie Diátaxis pour architecturer la documentation.

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

$ 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.0J’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.
À étudier
Je n’ai pas eu à le faire mais c’est un aspect que je souhaite mettre en oeuvre.
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
Le guide Écrire une extension Sphinx
Développer une extension hello world
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)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
Installation avec pip dans un environnement virtuel sur le même OS
sphinx-build 1 est la commande de génération de la documentation.
-M est une option récente, le résultat équivaut à la commande suivante avec l’ancienne option -b
Aide dans le REPL Python
Même aide affichée avec
le module pydoc
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
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.
…
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
"""
passLe 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
"""
passLe format Google est le format par défaut du plugin autoDocstring.
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⇨ 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.
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.jarL’extension MyST-Parser installe quelques utilitaires en ligne de commande 1
myst-anchorsmyst-docutils-demo : génère le HTML du markdown parsé sur la sorite standardmyst-docutils-htmlmyst-docutils-html5myst-docutils-latexmyst-docutils-pseudoxmlmyst-docutils-xmlmyst-inv