Skip to article frontmatterSkip to article content

La documentation est indispensable pour que des personnes souhaitent utiliser votre application, faire remonter des bugs ou même contribuer. Pour essayer de satisfaire le plus grand nombre, une documentation devrait au moins contenir

  • des tutoriels,
  • des petits guides sur les domaines
  • une documentation de référence (par exemple l’API).

Le fait d’écrire ces différentes parties a d’autres avantages

  • se rappeler ce qu’on a fait il y a six mois.
  • Avoir un meilleur code.
  • Etre un meilleur rédacteur en anglais (issue, email, ...)

Pour écrire de la documentation d’applications Python, sphinx est largement utilisé maintenant. Il s’appuie sur ReadTheDocs pour la diffusion en ligne. Il existe différentes extensions à sphinx qui offrent d’autres fonctionnalités comme nbsphinx qui permet d’intégrer des notebooks jupyter à la documentation finale.

sphinx

Différents formats peuvent être utilisés pour la rédaction de documentation

  • markdown
  • restructured text
  • notebook jupyter
  • ...

Initialiser sa documentation avec sphinx

Il vous faut dans un premier temps installer sphinx à l’aide d’une des commandes suivantes

  • pip install sphinx
  • mamba install sphinx
  • pixi add sphinx

Nous pouvons à présent initier l’arborescence de la documentation demandée par sphinx Pour ce faire

  • Créer un répertoire doc à la racine de son projet

  • Aller dans ce répertoire

  • Exécuter la commande suivante

    sphinx-quickstart
  • Répondre aux questions !!!

Il est toujours possible de changer ses réponses en modifiant le fichier de configuration créé lors de cette phase.

Vous devriez obtenir une arborescence qui ressemble à ça

! tree examples/calculator/doc
examples/calculator/doc
├── _build
├── conf.py
├── index.rst
├── make.bat
├── Makefile
├── _static
└── _templates

3 directories, 4 files

Les extensions de sphinx

Comme dit précédemment, il en existe de nombreuses. Nous donnons ici un échantillon dont on se sert assez régulièrement pour la documentation de logiciel scientifique.

autodoc

Cette extension permet de documenter automatiquement

  • des modules,
  • des classes,
  • des fonctions,

à partir de leur docstring.

Il faut ajouter dans les extensions de conf.py

extensions = [..., “sphinx.ext.autodoc”, ...]

Voici un exemple de docstring

def add(value1, value2): “”“add two values. :param value1: The first value :type value1: float or int :param value2: The second value :type value2: float or int :returns: the addition between value1 and value2 :rtype: float or int “”” pass

Pour insérer la documentation de cette fonction dans la documentation, il suffit de créer un fichier rst avec comme contenu

.. autofunction:: add

Si vous souhaitez documenter un module

.. automodule:: mymod
   :members:
   :undoc-members:

Si vous souhaitez documenter un module

.. autoclass:: myclass
   :members:
   :private-members:
   :special-members:

Pour plus d’information, voir la page de autodoc.

Il est possible de générer l’ensemble des fichiers rst de son API en utilisant le script sphinx-apidoc.

! sphinx-apidoc -f -o api examples/calculator

Lisibilité des docstrings

L’utilisation de la sémantique de l’autodoc dans les docstrings est un peu lourde et rend la documentation dans le code difficile à lire.

Vous avez deux extensions qui permettent d’améliorer considérablement la lisibilité

Nous nous intéresserons dans la suite à l’extension numpydoc.

Pour l’utiliser, il faut ajouter dans l’extension dans le fichier conf.py

extensions = [..., "numpydoc", ...]

Voici un exemple de documentation avec le style NumPy.

def add(value1, value2):
    """add two values.

    Parameters
    ----------
    value1 : float or int
        the first value
    value2  : float or int
        the second value

    Returns
    -------
    float or int
        the addition between value1 and value2

    """
    pass

nbsphinx

Il est toujours intéressant de mettre des tutoriels dans son package permettant aux nouveaux utilisateurs de se familiariser rapidement avec l’outil. Les notebooks s’y prêtent très bien. nbsphinx permet d’intégrer ces notebooks à la documentation.

Pour installer l’extension, il suffit de faire

pip install nbsphinx

ou

mamba install nbsphinx

Pour activer l’extension, il suffit de l’ajouter à la liste extension du fichier conf.py

extensions = [..., 'nbsphinx', ...]

Il est possible ensuite de mettre les notebooks dans le toctree au même titre que les fichiers rst.

Read The Docs

RTD permet de construire et d’héberger votre documentation sphinx en se basant sur votre CSV (git, mercurial, ...). Chaque tag et branche sont convertis en version et RTD conserve l’historique des différentes versions.

Lorsque vous faites un push sur votre dépôt, RTD lance automatiquement la génération de la documentation ce qui fait que votre documentation est toujours à jour ! Il faut noter également que le multi langue est supporté.

Enfin, deux autres caractéristiques intéressantes: le recherche dans la documentation est plus puissante que celle que vous trouvez dans sphinx de base. La documentation est indexée via elasticsearch et vous pouvez faire des recherche plein texte. Plusieurs formats de sortie sont supportés: html, pdf, zipped html, epub, ...

Le thème

Enfin, sachez qu’il existe différents thèmes pour la documentation. RTD a longtemps eu un thème par défaut appelé sphinx_rtd_theme. Depuis l’arrivée de jupyter-book et de myst, les choses évoluent et les sites offrent de plus en plus de possibilités au niveau du placement du contenu et de sa mise en page.

Exercices

Le répertoire step0 reprend la dernière étape du TP précédent en ayant ajouté des docstrings de type numpydoc pour chacune des fonctions.

Références