TD 1g — Le notebook, ouvert de trois façons#
Note
Les fichiers des TD de la séance sont dans l’archive info01-cours1.zip.
Le TD ouvre un même notebook, altitudes.ipynb, de trois façons : dans le
navigateur, sans rien installer ; dans l’éditeur de code, VS Code ; dans
JupyterLab, lancé depuis Anaconda Navigator. Aucune des trois façons ne
demande de créer un fichier ou un environnement. Le notebook reprend le programme du TD 1c, qui calcule la
moyenne de trois altitudes, découpé en cellules. La dernière étape fait
constater ce que le noyau retient d’une cellule à l’autre. Le TD dure une
douzaine de minutes.
Le TD nécessite un navigateur, VS Code configuré au TD 1c, et Anaconda Navigator.
Étape |
Objectif |
Ce qu’on fait |
|---|---|---|
1 |
exécuter un notebook sans rien installer |
ouvrir le notebook dans le navigateur |
2 |
exécuter un notebook dans un IDE |
ouvrir le notebook dans l’éditeur |
3 |
exécuter un notebook dans JupyterLab |
ouvrir le notebook depuis Anaconda Navigator |
4 |
relire l’état du noyau d’une cellule à l’autre |
relancer une cellule, et lire ce que le noyau retient |
Ce que chaque étape fait constater est expliqué à la fin du guide, dans « Ce que le TD fait constater » : faire l’étape d’abord, et noter ce qu’on observe, avant de lire l’explication.
2 · Ouvrir le notebook dans l’éditeur#
À faire : ouvrir
altitudes.ipynbdans VS Code ; choisir le noyaubased’Anaconda ; exécuter les cellules.À obtenir : les quatre cellules de code exécutées, chacune avec son numéro entre crochets.
Ouvrir le fichier#
Lancer VS Code, puis menu File, Open Folder (Fichier, Ouvrir le dossier), et
choisir Bureau\info01\cours1\1g_notebooks. Dans le panneau Explorer, à
gauche, cliquer sur altitudes.ipynb.
Le notebook s’ouvre en cellules, avec une barre d’outils en haut. Ouvrir un
.ipynb nécessite l’extension Jupyter de Microsoft, d’identifiant
ms-toolsai.jupyter, la troisième du module après l’extension Python (TD 1c)
et l’extension C++ (TD 1e). Si elle n’a pas été installée avec les réglages
du TD 1c, VS Code la propose à l’ouverture du fichier : accepter. Si VS Code
ne la propose pas, l’installer depuis le panneau Extensions
(Ctrl + Maj + X), en tapant son identifiant.
Choisir le noyau#
En haut à droite du notebook, cliquer sur « Select Kernel ».
Choisir « Python Environments… », puis la ligne
base, dont le chemin estC:\ProgramData\anaconda3\python.exe.
Ce que VS Code appelle « noyau » est l’interpréteur Python qui exécute les cellules. Choisir celui d’Anaconda ; le TD 1i explique pourquoi ce choix est nécessaire. Le nom du noyau choisi s’affiche ensuite à la place de « Select Kernel ».
Exécuter les cellules#
Cliquer dans la première cellule de code, puis Maj + Entrée, comme dans
le navigateur. Exécuter ainsi les quatre cellules, dans l’ordre. Le bouton
« Run All » de la barre d’outils les exécute toutes d’un coup.
Un bloc de texte s’affiche mis en forme. Un double-clic dessus montre le
Markdown qu’il contient, celui du TD 1f ; Maj + Entrée affiche de
nouveau le texte mis en forme.
Vérification : chaque cellule de code a un numéro à gauche, [1] à
[4], et la cellule de la somme affiche trois valeurs.
À noter : ce qu’affiche la cellule des données, qui n’appelle pas
print.
4 · Relancer une cellule, et lire ce que le noyau retient#
À faire : relancer la cellule de la somme ; lire
total; puis relancer la somme sans remettretotalà zéro ; redémarrer le noyau et tout exécuter.À obtenir : les cellules de nouveau exécutées dans l’ordre, numérotées
[1]à[4].
L’étape se fait dans JupyterLab, dont les menus sont cités ici ; dans VS Code, les mêmes commandes sont dans la barre d’outils du notebook.
Relancer une cellule#
Le notebook se termine par la section « Ce que le noyau retient » : une
cellule qui ne contient que total, et une consigne.
Cliquer dans la cellule de la somme, celle qui commence par
total = 0, et taperMaj+Entrée.Cliquer dans la dernière cellule,
total, et taperMaj+Entrée.
À noter : le numéro entre crochets de chaque cellule après ces deux
exécutions ; la valeur de total.
Relancer la somme sans sa première ligne#
La première ligne de la cellule de la somme, total = 0, remet la variable
à zéro chaque fois que la cellule s’exécute. Le texte du notebook, au-dessus
de la cellule total, annonce que relancer la somme ajoute une seconde fois
les trois altitudes : cette seconde addition ne se produit que si la cellule
ne contient pas cette ligne. Pour voir ce
que le noyau retient d’une exécution à l’autre, la retirer le temps d’un
essai :
Dans la cellule de la somme, effacer la ligne
total = 0.Exécuter cette cellule seule, par
Maj+Entrée, puis la dernière cellule,total.Remettre la ligne
total = 0en tête de la cellule, à l’identique.
À noter : les trois valeurs affichées par la cellule de la somme, et la
valeur de total.
Redémarrer le noyau#
Menu Kernel, « Restart Kernel and Run All Cells… », puis confirmer par Restart. Dans VS Code : bouton « Restart » de la barre d’outils, puis « Run All ».
Vérification : les cellules sont numérotées [1] à [4] dans l’ordre de
la page, et total vaut 387.0.
Pour finir, dans JupyterLab : menu File, Shut Down. La fenêtre noire se ferme ; fermer ensuite l’onglet.
Ce que le TD fait constater#
Cette section se lit après avoir fait les étapes.
Étapes 1 à 3 : trois façons d’ouvrir le même fichier#
Où l’on ouvre le notebook |
Ce qu’il a fallu faire |
Ce qu’on constate |
|---|---|---|
Dans le navigateur |
ouvrir jupyter.org/try-jupyter, y déposer le fichier |
aucun compte, aucune installation, le calcul se fait sur votre ordinateur |
Dans l’éditeur |
ouvrir le |
les cellules s’exécutent par |
Depuis Anaconda |
page d’accueil de Navigator, fiche JupyterLab, Launch |
un onglet de navigateur, et le fichier dans l’arborescence |
Les trois logiciels ouvrent le même fichier, et l’exécutent de la même façon. Ce qui change de l’un à l’autre est l’endroit où s’exécute le noyau, le programme qui exécute les cellules :
JupyterLite, la version de JupyterLab ouverte à l’étape 1, n’a pas de serveur. Son noyau est un Python compilé pour le navigateur, Pyodide, qui s’exécute dans l’onglet : le code et les données saisis ne sont pas envoyés sur le réseau. JupyterLite est un service en ligne dont le calcul se fait sur votre machine. Le fichier déposé est enregistré dans le stockage interne du navigateur, et n’apparaît dans aucun dossier du disque.
JupyterLab, lancé par Navigator, est un serveur qui s’exécute sur le poste : la fenêtre noire est ce serveur, et
localhost:8888désigne le port 8888 de la machine même. L’onglet du navigateur affiche le notebook, sans exécuter le code.VS Code démarre lui-même le noyau, dans l’environnement choisi, sans passer par un serveur.
Aucune des trois façons n’a nécessité de créer un environnement : les postes de la
salle ont la distribution Anaconda, qui installe JupyterLab et ipykernel,
le paquet dont VS Code a besoin pour exécuter un notebook, dans base. Sur
un ordinateur installé avec Miniforge, base n’a ni l’un ni l’autre : c’est
le premier constat du TD 1i.
Dans le navigateur, une cellule %pip install peut installer une
bibliothèque écrite entièrement en Python. En revanche, un code qui lance
un autre programme du système par le module subprocess, comme ffmpeg ou
ImageMagick, ne fonctionne pas. Le notebook du TD ne lance aucun autre
programme.
Ce que les cellules affichent#
Cellule |
Sortie |
|---|---|
les données |
|
la somme |
|
la moyenne |
|
|
|
La dernière expression d’une cellule s’affiche sans print, comme dans la
session interactive du TD 1c : la cellule des données affiche la liste,
et la dernière cellule la valeur de total. Les trois valeurs de la somme
sont celles que le débogueur montrait dans le panneau Variables au TD 1c.
Le bloc de texte de la moyenne contient une formule écrite en LaTeX, entre dollars, que le notebook affiche mise en forme. La formule et le code expriment le même calcul sur la même page, l’une pour être lue, l’autre pour être exécutée.
Étape 4 : ce que le noyau retient#
Le numéro entre crochets donne l’ordre d’exécution ; il ne dépend pas de la
place de la cellule dans la page. Après la première relance de l’étape 4, la cellule de
la somme porte [5] et la dernière [6], alors que la moyenne garde [3]. Un notebook dont les
numéros ne se suivent pas a été exécuté dans le désordre.
La dernière cellule affiche total sans le recalculer : la variable a été
créée par une autre cellule, et le noyau la conserve en mémoire entre deux
exécutions.
Relancer la cellule de la somme telle qu’elle est écrite redonne 387.0,
parce que sa première ligne, total = 0, remet la variable à zéro.
Sans cette ligne, la somme part de la valeur de total conservée par le
noyau, et
ajoute une seconde fois les trois altitudes : elle affiche 515.4, 646.4
puis 774.0, et total vaut 774.0. La cellule de la moyenne, qui n’a pas
été relancée, affiche encore 129.0 m : la page montre alors des résultats
qui ne correspondent plus entre eux.
Redémarrer le noyau efface toutes les variables ; le texte des cellules
reste, et « Run All » les exécute de nouveau dans l’ordre de la page. Le
redémarrage suivi de « Run All » remet ainsi le notebook dans un état
cohérent. Sans la ligne
total = 0, cette réexécution échouerait sur la cellule de la somme, avec
une erreur NameError : après le redémarrage, total n’existe plus.
Le fichier .ipynb#
Un .ipynb est un fichier texte au format JSON. Ouvert dans le Bloc-notes, il
montre chaque cellule avec son type et ses lignes :
"cell_type": "code",
…
"source": [
"altitudes = [128.4, 131.0, 127.6]\n",
"altitudes"
]
Les sorties y sont enregistrées avec le code, une fois le notebook exécuté
puis enregistré : rouvert, il affiche encore les résultats de la dernière
exécution. Le notebook du TD a été écrit dans un autre format de notebook,
MyST Markdown, du Markdown dont les cellules de code sont des blocs, puis
converti en .ipynb.