Outils pour utilisateurs

Outils du site


dev:python:sphinx:introduction

Ceci est une ancienne révision du document !


sphinx : Générateur de documentation

Sphinx est un programme dédié à la génération de tous types de documentation associée à un projet:

  • La documentation de référence (documentation des modules, classes et APIs);
  • les tutoriaux (documentation à objectifs pédagogiques);
  • Les How-To (documentation ayant pour objet la résolution de problèmes);
  • Les documents explicatifs ayant pour objectif de faire connaître ou de justifier certains choix.

Souvent on pense à Sphinx comme à un outil de génération de documentation technique pour Python capable d'extraire les docstrings du code afin de produire une documentation de référence en HTML.

Plus généralement Sphinx peut prendre en entrée tout type de document texte et produire une sortie lisible.

En général les fichiers texte en entrées utilisent le formatage reStructredText et la sortie produite par Sphinx est un ensemble de documents formatés en HTML.

  • Sphinx propose d'autres types de sorties comme PDF, ePub, man etc.
  • Sphinx a besoin d'un fichier de configuration (conf.py)
  • Sphinx est modulaire, il comporte de nombreuses extensions facilement activables.

Installer Sphinx

# Création d'un environnement virtuel Python
python3 -m venv env
 
# Activer l'environnement
source env/bin/activate
 
# Installation de Sphinx
pip install sphinx

Initialiser le répertoire de travail

Sphinx a besoin d'une arborescence spécifique pour fonctionner. La commande sphinx-quickstart est interactive et se charge de créer ces répertoires et fichiers.

Par défaut la commande crée un dossier nommée source pour accueillir la documentation. Pour éviter toute confusion surtout si Sphinx est utilisé pour documenter un projet de code, on peut sans problème renommer ce dossier :

mv source doc

Une fois le dossier renommé, il faut modifier la valeur de la variable SOURCEDIR du Makefile et de make.bat.

Tester la Génération de la documentation

Pour valider l'installation et les paramétrages initiaux, on tente de générer la documentation :

# Générer la documentation
make html
 
# Consulter la documentation produite
firefox build/html/index.html

Installer Sphinx et le theme Read The Doc

Sphinx utilise par défaut le theme minimaliste Alabaster, un thème plus complet et populaire est disponible via pip :

pip install sphinx-rtd-theme

Pour remplacer le thème par défaut, éditer docs/conf.py et remplacer la valeur de la variable html_theme :

html_theme = 'sphinx_rtd_theme'

Les thèmes sont configurables. Confère la documentation du thème Read The Docs.

Ajouter des pages

  • Créer un fichier .rst dans le dossier de la documentation ;
  • Référencer la nouvelle page dans l'index.
  • La page doit contenir au moins un titre pour être utilisée par Sphinx.
  • Laisser une ligne vide sous les paramètres de la directive toctree:: et respecter l'indentation en s'alignant sous les paramètres.
hello.rst
Hello World
===========
 
Hello Sphinx !!!

Le fichier index.rst a le contenu suivant

.. toctree::
   :maxdepth: 2
   :caption: Contents:
 
   ./hello.rst

La directive toctree permet de générer la table des matières (table of content).

  • Le paramètre :maxdepth: spécifie le nombre de niveaux de titres à afficher dans la table. Avec une valeur 1 seul les titres de page seront présents dans l'index.
  • Le paramètre :caption: permet de définir le titre à afficher au dessus du sommaire ;
  • Attention a bien laisser la ligne vide qui sépare les paramètres de la directive de son contenu.

Introduction à la syntaxe reStructuredText

La syntaxe reStructuredText, bien que proche de Markdown, est plus complète mais également plus stricte.

Pour l'essentiel :

Voici du texte en *italique*, en **gras**, et voici du ``code inline`` composant un premier paragraphe.

Ce second paragraphe est séparé du premier par une ligne vide.

Pour les titres :

Titre principal
===============


Titre de niveau 2
-----------------


Titre de niveau 3
~~~~~~~~~~~~~~~~~

Pour une URL :

Syntaxe d'écrite d'une URL `mon titre <https://example.com>`_
  • Attention aux guillemets arrières ;
  • Attention à l'espace avant < ;
  • Attention à l'underscore;

Les listes :

Liste à puce :

* Ceci est une liste
* un autre élément

  * Une sous-liste
  * notez bien le saut de ligne avec la liste principale,
    ça ne marchera pas si vous l'oubliez !

* un dernier élément

Liste ordonnée :

1. Un
2. Deux
3. Trois

Une autre liste ordonnée :

#. Un
#. Deux
#. Trois

Blocs de code

Voici comment faire un bloc que code simple ::

   Ceci est un bloc de code. Il est créé grâce aux doubles deux-points.

On peut également placer les doubles deux-points seuls si on ne veut pas
terminer sa phrase par ce symbole.

::

   Voici un autre bloc de code...

Et c'est pas fini ! On peut aussi définir un bloc de code avec une syntaxe
plus explicite, grâce à laquelle on peut indiquer à Sphinx dans quel
langage il est rédigé, ce qui lui permettra d'activer la coloration
syntaxique :

.. code-block:: python

   #!/usr/bin/env python

   print("Ceci est un bloc de code Python\n")

On change l'indentation pour sortir du bloc de code.

On peut également utiliser des blocs

.. NOTE::

   Ceci est une note.

.. WARNING::

   Ceci est un avertissement !

.. IMPORTANT::

   Ceci est important !

Auto-documenter un package Python

Sphinx a été conçu par la communauté Python pour les projets Python. Cependant il est utilisés par de nombreux autres projets opensource.

Sphinx utilise l'extension autodoc pour inclure les docstrings dans la documentation à produire.

reStructuredText est le formatage utilisé par défaut mais d'autre formatages peuvent être utilisés comme Markdown mais dans ce cas des extensions supplémentaires seront nécessaires.

Pour documenter l'ensemble des classes d'un module:

  • Le fichier conf.py doit avoir l'extension autodoc (sphinx.ext.autodoc) déclarée;
  • Le fichier RST doit utiliser la directive automodule avec l'option :members:
.. automodule:: my_module_name
   :members:

Introduire les images (png, jpg, gif)

Voici une image :

.. figure:: ./images/image.png

Voici un autre image avec quelques paramètres en plus :

.. figure:: ./images/image.png
   :alt: Texte alternatif
   :target: http://blog.flozz.fr/
   :width: 400px
   :align: center

   Texte affiché sous l'image

L'extension doctest

sphinx.ext.doctest

Références

dev/python/sphinx/introduction.1740602269.txt.gz · Dernière modification : 2025/02/26 20:37 de yoann