Architecture de Jupyter
Une session locale de notebook implique généralement trois rôles plutôt qu’un unique « processus de notebook » :
- Client : l’interface du navigateur ou de l’éditeur où les cellules sont modifiées et les sorties affichées.
- Serveur : gère les fichiers, sessions, l’authentification, les connexions HTTP/WebSocket et le cycle de vie des noyaux.
- Noyau : un processus propre à un langage qui exécute le code et conserve l’état d’exécution.
Ces rôles peuvent s’exécuter sur une machine ou par une connexion distante. D’autres interfaces peuvent aussi parler le protocole de messagerie Jupyter sans utiliser l’interface classique Notebook.
Ce que contient le fichier notebook
Un fichier .ipynb est du JSON contenant :
- des cellules Markdown et de code ;
- les métadonnées des cellules et du notebook ;
- des sorties enregistrées telles que du texte, des images et des données d’affichage enrichies ;
- des indications sur le noyau et le langage.
Il ne contient pas le processus Python ou R actif, les paquets installés, les jeux de données externes, les variables d’environnement ni chaque fragment d’état caché ayant influencé l’exécution. C’est pourquoi un notebook enregistré peut s’afficher correctement mais échouer lors d’une nouvelle exécution ailleurs.
Flux entre client, serveur et noyau
Lorsqu’une session a besoin d’un noyau, le serveur en démarre un ou s’y connecte et conserve ses paramètres de connexion ZeroMQ. Un client dans le navigateur communique normalement avec le serveur par HTTP et WebSocket ; le serveur relaie ces messages vers les canaux Jupyter du noyau. Le noyau conserve les variables entre les cellules jusqu’à ce qu’il soit redémarré ou arrêté.
Ouvrir un notebook démarre souvent son noyau sélectionné ou s’y connecte, mais le comportement exact dépend de l’interface et de l’état de la session. Consulter un notebook statique ne nécessite pas de noyau actif.
Conversion avec nbconvert
nbconvert lit le document du notebook, applique des préprocesseurs facultatifs et transmet le résultat à un exportateur tel que HTML ou Markdown. Certains formats utilisent ensuite des modèles ou des postprocesseurs. La conversion peut exécuter un notebook lorsqu’elle est explicitement configurée pour cela, mais un export ordinaire peut simplement employer les sorties déjà enregistrées dans le fichier.
jupyter nbconvert --to html analysis.ipynb
Conséquence pratique
Le nombre d’exécutions d’un notebook et ses sorties visibles ne suffisent pas à établir sa reproductibilité. Redémarrez le noyau, exécutez toutes les cellules dans l’ordre, figez l’environnement et consignez les entrées externes. Lorsque le code devient réutilisable ou critique pour la production, déplacez-le dans des modules avec des tests et laissez le notebook appeler ces modules.