Ecosystème Jupyter#
Bruno Denis, mai 2024
Environnement open source qui propose
un format ouvert de carnet
des applications web pour
créer des carnets
partager des carnets
collaborer autour de carnets
des applications pour générer
des documents
des applications
Une enquête auprès des lecteurs de la revue « Nature » place « IPython Notebook » en troisième place par ordre d’impact sur le travail des chercheurs [Perkel 2021].
Année |
Code informatique majeur |
Description |
Impact |
|---|---|---|---|
1957 |
Fortran compiler |
le langage pionnier |
1er |
1965 |
FFT (Fast Fourier Transform) |
le traitement du signal |
2e |
1965 |
Atlas of protein sequence and structure |
le catalogueur de molécules |
7e |
1969 |
Modèle de circulation générale |
le leadeur de la prévision météo |
10e |
1979 |
BLAS (Basic Linear Algebra Subprograms) |
pionnier du calcul matriciel |
5e |
1987 |
NIH Image |
les bases de l’imagerie médicale |
8e |
1990 |
BLAST (Basic Local Alignment Search Tool) |
le chercheur de séquence |
6e |
1991 |
le serveur de preprints |
4e |
|
2011 |
IPython Notebook |
l’explorateur de donnée, mais pas que… |
3e |
2012 |
AlexNet |
deep learning basé sur les réseaux de neurones |
9e |
[Perkel 2021] J. M. Perkel, “Ten computer codes that transformed science,” Nature, vol. 589, no. 7842, pp. 344–348, Jan. 2021, doi: 10.1038/d41586-021-00075-2.
Carnet#
Carnet du scientifique#
Il sert à documenter les hypothèses, les expériences, les mesures, les analyses, les interprétations. C’est un outil d’aide mémoire et de réflexion, il organique du texte, des formules mathématiques, des données, des figures…
Carnet électronique#
Un carnet électronique est une succession ordonnée de cellules en langage naturel et en langage informatique.
Les cellules en langage naturel se composent de texte formaté, d’expressions mathématiques, de tableaux de données et/ou de médias (images, vidéos …)
Les cellules en langage informatique se composent d’une partie avec le code et d’une partie avec le résultat de l’exécution du code (donnée, graphiques…)
Techniquement, pour obtenir une interaction entre l’utilisateur et le code des cellules en langage informatique, les logiciels d’édition disposent de deux composantes
un noyau d’exécution (kernel) qui assure l’exécution des cellules de code de programmation et renvoie les résultats
une application avec deux aspects
une interface utilisateur (GUI ou front-end) qui gère les interactions avec l’utilisateur
une dorsale (back-end) qui, selon les demandes de l’utilisateur, émet des requêtes d’exécution de code au noyau et met à jour le fichier qui stocke le carnet électronique.

Le pionier : Mathematica#
Utilisation des carnets
électroniques dès 1987
[Wolfram 2023]Format propriétaire
qui limite sa diffusion
[Wolfram 2023] Stephen Wolfram, « Introducing Chat Notebooks: Integrating LLMs into the Notebook Paradigm, » Stephen Wolfram Writings, 2023
Carnet Jupyter (Jupyter notebook)#
Un carnet Jupyter est une succession de cellules de 3 types différents :
Texte brut
Texte formaté et enrichi d’expressions mathématiques des liens vers des images, des vidéos … (langage de balisage Markdown)
Code informatique (avec une partie dédiée aux résultats de l’exécution du code)
type de cellule |
langage du contenu de la cellule |
|---|---|
Texte brute |
- |
Texte formaté |
|
Code informatique |
Python, Julia, R, C++, Matlab … |
Un carnet Jupyter est sauvegardé dans un fichier à l’extension .ipynb (IPython notebook)
Le format de sauvegarde est ouvert (nbformat) et basé sur le format JSON (JavaScript Object Notation)
Exemples de carnets Jupyter en ligne#
Titre et lien |
Description |
Auteurs |
|---|---|---|
Exemple basic intégré à ce livre et déjà présenté ci-dessus |
Bruno Denis, ENS Paris-Saclay, France |
|
Analyse de résultat de mesure en travaux pratiques |
Andrés Marrugo, Universidad Tecnológica de Bolívar, Bolivie |
|
Calcul symbolique pour obtenir l’équation \(\left ( \frac{\partial^4}{\partial x^4} + 2 \frac{\partial^4}{\partial x^2\partial y^2} + \frac{\partial^4}{\partial y^4} \right ) \Phi = 0\) en coordonnées polaires |
Jeevanjyoti Chakraborty, IIT , Inde |
|
Cours interactif sur les transformations planes appliquées aux chaines cinématiques avec Python |
Marcos Duarte et Renato Naville Watanabe, Federal University of ABC, Brésil |
Langage Markdown#
Markdown est un langage de balisage pour le formatage de texte brut facile à lire et facile à écrire. Il inclus
les éléments localisés de type : accentuation, code, liens, images, équations
les blocs de type : paragraphe, titres, listes, block de code, bloc d’équation
| Ecrire | ou | pour obtenir |
|---|---|---|
*Italique* |
_Italic_ |
Italic |
**Gras** |
__Gras__ |
Gras |
# Titre 1 |
Titre 1 ======= |
Titre 1 |
## Titre 2 |
Titre 2 ------- |
Titre 2 |
### Titre 3 |
Titre 3 ....... |
Titre 3 |
#### Titre 4 |
Titre 4 |
| Ecrire | ou | pour obtenir |
|---|---|---|
[Link](https://a.org) |
[Link][1] ⋮ [1]: https://a.org |
|
 |
![Image][1] ⋮ [1]: http://url/b.jpg |
|
> Bloc de citation |
|
Bloc de citation |
* Liste * Liste * Liste |
- Liste - Liste - Liste |
|
1. Un 2. Deux 3. Trois |
1) Un 2) Deux 3) Trois |
|
Ecrire
`Code` entre 2 accents grave
pour obtenir
Code entre 2 accents grave
Ecrire
``` Python
s = input("Taper un mot :")
print("Vous avez tapé", s)
```
pour obtenir
s = input("Taper un mot :")
print("Vous avez tapé", s)
Ecrire
Équation $E=mc^2$ en ligne
pour obtenir
Équation \(E=mc^2\) en ligne
Ecrire
Équation :
$$
E_c = \frac{1}{2} \int \int \int \rho v^2 \text{d}\tau
$$
pour obtenir
Équation :
Créer un carnet#
Logiciels de création de carnets Jupyter : Jupyter est une application web, l’utilisateur interagir au travers d’un navigateur web.

Interface utilisateur |
Dorsale (back-end) |
Noyaux d’exécution |
|---|---|---|
Jupyter Notebook |
Jupyter |
Julia |
Jupyter Lab |
Jupyter Hub |
Python |
R |
||
mais pas que … |
En marge du projet Jupyter, le projet JupyterLite propose une structure logicielle plus compacte en intégrant le noyau d’exécution dans l’application web grâce à la technologie WebAssembly (wasm).

Organisation matérielle#
Deux organisations matérielles pour la création d’un carnet Jupyter, à gauche une installation « locale » et à gauche une installation « distante ».
Lancement de Jupyter#
Pour l’installation locale
depuis le navigateur Anconda
depuis le menu Windows
depuis une interface de commande
jupyter notebook
jupyter lab
Pour l’installation distante
Interface JupyterLab#
Création d’un carnet avec JupyterLab#
Édition d’un carnet#
Voir le tutoriel ressource de l’Université Paris-Saclay :
Partager un carnet#
Il y a plusieurs usages liés au partage d’un carnet Jupyter. On peut souhaiter permettre à des personnes tierces extérieures de :
lire le contenu d’un carnet (transmission d’informations)
(ré)exécuter le contenu du carnet, éventuellement avec des données d’entrées différentes (reproductibilité des résultats, ou carnet comme outil de travail)
amender et compléter un carnet (travail collaboratif)
Lire un carnet partagé sur une forge#
Avec nbviewer (application web open source) soit
avec serveur interne
avec nbviewer.org (service hébergé gratuitement par OVHcloud et fastly)
Des services d’hébergement en ligne comme github.com ou gitlab.com proposent aussi la visualisation en ligne de carnet Jupyter.
Carnet Jupyter |
lien de |
|---|---|
Evaluation of a force sensor |
|
Biharmonic equation and Stresses in Polar coordinates |
|
Rigid-body transformations in a plane (2D) |
Exécuter un carnet partagé sur une forge#
Avec la pile logicielle open source Binder qui construit l’environnement d’exécution adapté à un carnet, exécute cet environnement et propose l’interface utilisateur Jupyter Notebook ou Jupyter Lab pour interagir avec le carnet.
avec serveur interne
avec mybinder.org (service hébergé gratuitement par OVHcloud)
Illustration du processus de partager des résultats reproductibles avec un carnet Jupyter [Beg 2021]
[Beg 2021] Marijan Beg, Juliette Taka, Thomas Kluyver, Alexander Konovalov, Min Ragan-Kelley, Nicolas M. Thiéry, and Hans Fangohr. Using Jupyter for Reproducible Scientific Workflows. Computing in Science & Engineering, 23(2):36–46, March 2021. doi:10.1109/MCSE.2021.3052101.
Exemple#
Les carnets associés à cette présentation sont disponibles sur la forge de l’université Paris-Saclay
lien vers le dépôt
https://gitlab.dsi.universite-paris-saclay.fr/bruno.denis/intro_jupyter
lien vers le site mybinder.org
Convertir un carnet#
Convertion |
Outils |
Résultat d’exécution |
|---|---|---|
carnet \(\rightarrow\) page html |
nbconvert |
statique |
carnet \(\rightarrow\) fichier pdf |
nbconvert |
statique |
carnet \(\rightarrow\) fichier Latex |
nbconvert |
statique |
carnet \(\rightarrow\) script Python |
nbconvert |
statique |
carnet \(\rightarrow\) diaporama html |
nbconvert, dejavu |
statique |
carnet \(\rightarrow\) diaporama html |
RISE |
dynamique, avec le |
carnets + fichiers Markdown \(\rightarrow\) site web |
jupyter-book |
statique |
carnet \(\rightarrow\) application web |
voila |
dynamique, avec le |
carnet \(\rightarrow\) application web |
voici |
dynamique, avec le |
Diaporama#
Les diaporamas générés à partir de carnets Jupyter sont construits avec la technologie open source Reveal.js
Concepts d’un diaporama Reveal.js :
format de fichier :
htmlorganisation en série de diapositives
pour passer d’une série à une autre, utiliser les touches → et ←
pour passer d’une diapositive à l’autre dans une même série, utiliser les touches ↑ et ↓

Le diaporama intègre une vue « présentateur » qui s’affiche dans une autre fenêtre du navigateur web en appuyant sur la touche s.

Cette cellule contient une note pour le présentateur. Elle sera affichée dans une secondes fenêtre lorsque ce carnet est utilisé comme diaporama.
[1] : la métadonnée « slide_type »: « notes » est associée à cette cellule
Préparation d’un carnet Jupyter avant la génération du diaporama#
Associer une étiquette (tag) à chaque cellule du carnet pour lui attribuer un comportement dans le diaporama.
Tag |
Comportement de la cellule dans le diaporama |
|---|---|
- |
La cellule prend place dans la diapositive en cours, à la suite des cellules qui y sont déjà présentes |
Slide |
La cellule débute une nouvelle série de diapositives |
Sub-Slide |
La cellule débute une nouvelle diapositive dans la série en cours |
Fragment |
La cellule prend place à la suite de la diapositive en cours, à la suite des cellules qui y sont déjà présentes et elles n’apparaissent qu’après une action du présentateur |
Skip |
La cellule n’apparait pas dans le diaporama |
Note |
La cellule sert de note pour l’orateur, elle pourra apparaitre sur une fenêtre du navigateur web, différente de celle des diapositives à destination de l’auditoire |
Ajout de tag avec l’interface JupyterLab

Génération d’un diaporama#
En version statique (sans noyau d’exécution)
par le menu de JupyterLab
file -> Save and Export Notebook As… -> Reveal.js Slidespar une interface de commande avec nbconvert, exemples
jupyter nbconvert --to slides lokta_volterra_plotly.ipynbjupyter nbconvert --to slides --embed-images lokta_volterra_plotly.ipynb
En version dynamique (noyau d’exécution nécessaire à l’utilisation)
par l’extention RISE (Reveal IPython Slideshow Extension)

Jupyter book#
Le projet Jupyter Book propose de rassembler un ensemble de carnets en un livre unique cohérent (site web statique, document pdf ou LaTeX, …).

Le contenu type d’un répertoire de travail pour construire un livre Jypyter est le suivant :
monlivre/ <- répertoire du libre
│
├── _config.yml ) fichiers de
├── _toc.yml ) configuration
│
├── intro.md )
├── chap1.md ) Contenu du livre,
├── chap2.ipynb ) des carnets Jupyter
├── section2.1.md ) ou des fichiers textes
├── section2.2.ipynb ) (CommonMark,
└── chap3.ipynb ) MyST Markdown, ...)
Le fichier _toc.yml (table of content) organise le contenu en parties, chapitres, sections. Exemple :
# fichier _toc.yml
format: jb-book # format du livre
root: intro # page d'accueil du livre
chapters: # une liste de chapitres va suivre
- file: chap1 # fichier qui contient les chapitre 1
- file: chap2 # fichier qui contient les chapitre 2
sections: # une liste de sections va suivre
- file: section2.1
- file: section2.2
- file: chap3 # fichier qui contient les chapitre 3
Le fichier _config.yml contient des informations et des directives pour l’application Jupyter Book. L’exemple minimal suivant fourni des informations pour la génération des hauts et des bas de page.
# fichier _config.yml
title: Introduction à l'écosystème Jupyter
author: Bruno DENIS (ENS Paris-Saclay)
logo: https://jupyterbook.org/en/stable/_static/logo-wide.svg
execute:
execute_notebooks: force
Pour générer le livre, il n’y a pas d’interface graphique utilisateur, il faut donc utiliser la ligne de commande. La génération type se fait par la commande suivante :
jupyter book build monlivre/
où monlivre est le chemin d’accès au répertoire qui contient le livre. Par défaut, Jupyter Book construit l’ensemble des pages html nécessaires pour le site web du livre. Les fichiers sont placés dans le répertoire _build/html
monlivre/
└──_build
└── html
├── _images
├── _static
├── index.html
├── intro.html
...

Exemples#
Conclusions#
Les quatre axes de Jupyter [Massot 2023] :
Interopérabilité : plus de 40 langages de programmation, intégration d’images, de visualisations, de formules mathématiques, d’explications textuelles et même de vidéos.
Partage : grande facilité d’appropriation et de réutilisation. Les carnet peuvent être exportés au format HTML, PDF ou Markdown. Très pratiques dans le cadre de la recherche collaborative mais aussi dans un contexte d’enseignement.
Interactivité : les utilisateurs peuvent directement exécuter le code dans le carnet numérique, voir instantanément le résultat et le modifier si besoin.
Écosystème : les carnets Jupyter permettent d’interagir avec de nombreuses bibliothèques et profitent d’une communauté très active. Il est donc facile de trouver des ressources et de se faire aider pour résoudre des tâches spécifiques.
[Massot 2023] Marie-Laure Massot, Arnaud Picandet, Maxime Popineau, Émilien Schultz, Agnès Tricoche. Jupyter, un carnet numérique au service des SHS. Atelier Digit_Hum 2023. Oct 2023, Paris, France
Points forts de Jupyter#
Un support unique pour penser et raconter, avec du code et des données [Massot 2023]
Points faibles de Jupyter#
Un environnement complexe [Massot 2023]
