Jupyter, le couteau suisse des interprétateurs interactifs

Magazine
Marque
Linux Pratique
Numéro
92
|
Mois de parution
novembre 2015
|
Domaines


Résumé
Boostez votre productivité en transformant votre navigateur web en interpréteur interactif, et combinez un ou plusieurs langages de programmation de votre choix !

Body

1. Jupyter Notebook App

Il y a presque 4 ans jour pour jour, le projet Notebook a fait son entrée avec la version 0.12 de IPython. Il a depuis bénéficié de nombreuses améliorations et a gagné en popularité. La dernière version IPython 4.0 met fin au Notebook dans sa forme actuelle et marque le début d’un nouveau projet appelé Jupyter. Le projet Jupyter, tout comme son prédécesseur, propose une application web qui permet aux utilisateurs d’interagir avec le code et de transformer le navigateur web en terminal interactif et en logiciel de traitement de texte en même temps. En plus de pouvoir développer, il est désormais possible de le documenter avec du texte enrichi (Markdown, HTML/CSS) des citations Bibtex, équations LaTex, des images et des vidéos. Si vous avez un blog ou que vous préparez un compte-rendu, vous pouvez exporter vos documents dans des formats tels que : PDF, LaTeX, RST, HTML et même en diapositives. Fait marquant – Jupyter n’est plus associé au IPython. Parmi les nombreux projets « satellites » de Jupyter, vous trouverez aussi plus de 50 langages différents !

1.1 Installation

En fonction de votre configuration et de vos permissions, il sera parfois nécessaire de précéder avec sudo les commandes mentionnées. Tous les codes présentés dans cet article ont été testés sur une installation « fraîche » de Ubuntu 14.04.03 LTS qui est fournie avec Python 2.7 et Python 3.4. Si vous utilisez déjà IPython Notebook, vous trouverez des informations utiles à propos de la migration sur le site : http://jupyter.readthedocs.org.

Installation Jupyter Notebook pour Python 3.x avec dépendances :

apt-get install python3-pip python3-zmq python3-dev

pip3 install jupyter

Installation Jupyter Notebook pour Python 2.x avec dépendances :

apt-get install python-pip python-zmq python-dev

pip install jupyter

Si comme moi vous installez Jupyter avec les kernels Python 2.x et 3.x en même temps, assurez-vous que les deux noyaux Python sont disponibles dans Jupyter. L'ancienne syntaxe marche toujours :

ipython2 kernelspec install-self --user

ipython3 kernelspec install-self --user

puis vérifiez la liste des noyaux disponibles ainsi que votre version de IPython :

jupyter kernelspec list

ipython3 --version

Cette dernière doit être au minimum 4.0.0. Avec une version antérieure, vous obtiendrez un message d'erreur : ImportError: No module named 'Ipython.path'. Il faut alors faire une mise à jour de IPython :

sudo pip3 install -u ipython

Pour utiliser Jupyter Notebook, vous devez posséder un des navigateurs suivants : Firefox (6 et +), Chrome (13 et +) ou Safari (5 et +). Démarrez le Notebook dans le répertoire de votre choix en tapant la commande jupyter notebook. Une fois démarré, Jupyter restera accessible dans votre navigateur sous l’adresse http://localhost:8888 ou http://127.0.0.1:8888.

Attention !

Par défaut, le Notebook est disponible uniquement pour l’hôte local, mais on peut configurer et sécuriser l'accès au Notebook. Le fichier de configuration jupyter_notebook_config.py se trouve dans le dossier $HOME/.jupyter. En cas d’absence, générez-le avec la commande jupyter notebook --generate-config. La configuration du Jupyter est distincte de celle de IPython.

1.2 Premiers pas avec le Notebook

L’interface principale de Jupyter est intuitive. Dans l’onglet Files, vous pouvez accéder à la liste des fichiers .ipynb (IPython Notebook) dans votre répertoire, les créer, renommer ou supprimer. L’onglet Running permet de voir la liste des processus actifs et de les éteindre avec l’option Shutdown. Cette dernière option est utile pour arrêter ou interrompre des processus actifs qui consomment trop de ressources système. Le dernier onglet Clusters est réservé aux calculs en parallèle. Créez maintenant un nouveau Notebook via le bouton New > Python3 ou New > Python2. Dans la nouvelle fenêtre qui s’affiche, vous trouverez une barre d’outils (figure 1) permettant d’accéder aux fonctionnalités les plus courantes ainsi qu’une première cellule du terminal interactif (figure 1). Dans cette dernière, vous pouvez entrer du code comme dans un terminal. Si vous n’avez jamais utilisé le Notebook, sachez qu’une cellule interactive peut contenir aussi bien du code (Code) que du texte enrichi (Markdown) ou bien du texte brut (Raw). Ces fonctionnalités sont discutées dans la suite de l'article. Vous pouvez modifier le type de la cellule à tout moment via la barre d'outils.

Attention !

Découvrez toutes les fonctionnalités du Notebook grâce à une présentation interactive intégrée. Dans le menu Help sélectionnez User interface Tour. Sélectionnez Help > Keyboard shortcuts pour connaître la liste des raccourcis clavier.

Faites maintenant un test trivial. Dans la première cellule, essayez d’entrer :

a = 2

print a

Exécutez le code en appuyant sur le bouton lecture (Figure 1) (alternative : tapez [Esc] pour sortir du mode édition de la cellule puis tapez [Shift] + [Entrer]). Si vous avez choisi Python3 comme noyau, une erreur de syntaxe devrait apparaître sur la ligne qui contient print. Rien de grave bien sûr. Placez le curseur dans la cellule en question, corrigez en ajoutant des parenthèses supplémentaires à la fonction print, puis exécutez le code à nouveau. L’erreur disparaît, le résultat 2 s'affiche. Facile, non ? Si vous avez les deux noyaux Python2 et Python3 vous pouvez aussi basculer de l'un vers l'autre via le menu Kernel > Change kernel. Si vous le faites, exécutez toutes les cellules dès le début via le menu Cell > Run all.

figure1

Figure 1 : Exemple de code avec erreur de syntaxe.

1.3 Programmation et rédaction ?

Jusqu’à présent le développement d’un code et la rédaction ne pouvaient pas être faits simultanément dans une seule interface d’utilisateur. On est habitué à ce qu’une interface en ligne de commandes comme IPython ou Matlab puisse être utilisée uniquement pour développer et corriger du code. La rédaction d’un chapitre de thèse, d’un article ou d'un compte-rendu nécessite LaTeX, LibreOffice ou Word. Pour une présentation devant un grand public, on va certainement utiliser PowerPoint, Impress ou Acrobat Reader. Avec le Notebook, il est possible de faire la rédaction tout en écrivant votre code. Il ne s’agit pas ici de simples commentaires. Grâce à la gestion du Markdown et des capacités multimédias de votre navigateur web, la gamme des possibilités est très large. Si vous avez déjà créé des documents HTML/CSS ou LaTeX, vous vous y retrouverez tout de suite.

Tout d’abord, dans un Notebook vous avez la possibilité de structurer votre texte en utilisant les balises HTML ou la syntaxe Markdown. Pour que le contenu d’une cellule interactive puisse générer du texte enrichi, changez son type Code > Markdown en utilisant la liste déroulante dans la barre d’outils (alternative : tapez [Esc] pour sortir du mode édition de la cellule puis tapez [M] pour Markdown, [Y] pour du code et [R] pour du texte brut). La Figure 2 montre un aperçu rapide des possibilités de rédaction avec la syntaxe Markdown et HTML.

figure2_gauche
  
figure2_droite

Figure 2 : Exemple de syntaxe Markdown, Flavoured Git Markdown et HTML durant et après rédaction.

La taille et la couleur des polices peuvent être modifiées à tout moment avec les balises HTML <font></font> comme dans l'exemple ci-dessous :

<cite><font color="red">

Laurence ! Je crois que le bug il est la - entre le clavier et la chaise. Sylvain.

</font></cite>

Bien que la décoration du texte peut être faite manuellement, il est préférable de modifier l'apparence du texte en utilisant une feuille de styles CSS personnalisée. Jupyter Notebook contrairement au IPython Notebook n'utilise pas les profils. À leur place, il y a un seul répertoire de configuration. La feuille de styles custom.css doit être donc (dé)placée dans le dossier ~/.jupyter/custom.

~/.ipython/profile_default/static/custom~/.jupyter/custom

Utilisez la commande locate style.min.css et/ou locate custom.css pour retrouver et comparer vos feuilles de styles.

Astuce : utilisez des extensions comme Calicio Spell Check pour améliorer votre rédaction en anglais. Après l'installation, une case à cocher dans la barre d'outils vous permettra d'activer/désactiver la vérification de l'orthographe. Vous trouverez d'autres extensions utiles en recherchant le mot clé nbextension.

jupyter nbextension install https://bitbucket.org/ipre/calico/downloads/calico-spell-check-1.0.zip

jupyter nbextension enable calico-spell-check

Attention !

Dans le Notebook, le contenu de chaque cellule est décrit à l'aide des balises (format JSON) et peut contenir du code JavaScript, ce qui représente un risque potentiel pour votre ordinateur. Le contenu d'une cellule est exécuté/rendu pleinement uniquement si le document Notebook a été créé ou authentifié par l'utilisateur avec sa propre clé de sécurité (notebook_secret). Dans le cas échéant, le contenu CSS et JavaScript non authentifié est enlevé de la cellule. Le contenu est toujours assaini (Google Caja).

1.4 Widgets, images et vidéos

Durant une réunion ou une formation, une démonstration en direct de votre code est plus intéressante que des captures d'écran. Les composants graphiques interactifs - ou widgets - constituent une catégorie à part. Pas besoin de plonger dans le Tcl/TK ou Qt, si vous avez besoin d'un bouton, d'une liste déroulante, ou d'une barre de progression, les widgets sont là pour vous aider à construire en mode ultra rapide un GUI pour votre code. Imaginons par exemple une fonction myplot() qui accepte un paramètre flottant dt et un paramètre de type string sat pour afficher un graphique. Pour construire une GUI interactive, seulement 3 lignes de codes sont nécessaires :

from ipywidgets import FloatSlider, ToggleButtons, interact

res=interact(myplot,dt=FloatSlider(min=0, max=8, step=1, value=1),

sat=ToggleButtons(description='Satellite:',

options=['Geosat', 'Topex', 'Envisat'],));

Dans l'exemple ci-dessus (figure 3), FloatSlider génère un curseur de défilement qui retourne un nombre fini des valeurs comme l'aurait fait numpy.arange ou numpy.linspace. ToggleButtons affiche trois boutons cliquables et retourne une valeur de type string. La fonction interact fait le lien entre les trois éléments. Ce code m'a permis de générer l'interface visible sur la figure 3. Dès maintenant, chaque personne qui visualise mon fichier peut non seulement l’exécuter, mais aussi étudier en direct la sensibilité des différents paramètres. Seul bémol : le rendu HTML statique des ipywidgets n'a pas été encore amélioré.

figure3

Figure 3 : Widgets, images et vidéos directement dans votre terminal interactif.

Attention !

L'importation de certains modules a changé avec Jupyter Notebook.

IPython.html → notebook, IPython.html.widgets → ipywidgets,IPython.kernel → jupyter_client, ipykernel

Coté image et vidéo, la situation est encore plus simple. Seulement deux lignes de code vous permettent d’intégrer dans votre document une page ou un moteur de recherche via <Iframe>, par exemple :

from IPython.display import HTML

HTML('<IFrame src="https://fr.m.wikipedia.org/wiki/Main_Page" width=700 height=350>')

Idem pour les vidéos des services populaires :

from IPython.display import YouTubeVideo

YouTubeVideo('b9MQ4R5NrWI')

L'utilisation de ces éléments interactifs est d'autant plus intéressante vu que la plupart d'entre eux garderont leur aspect et/ou leur interactivité une fois publiés sur votre réseau ou sur le net.

1.5 Conversion et publication

L'outil nbconvert est un outil en ligne de commandes qui permet de convertir les fichiers .ipynb dans un des formats supportés entre autres : HTML, LaTeX, PDF, python (fichier .py) et slides.

jupyter nbconvert --to pdf votre_fichier.ipynb

jupyter nbconvert --to html --template base votre_fichier.ipynb

Si vous partez d'une nouvelle installation Ubuntu 14.04 pour profiter du rendu en LaTeX et PDF, vous aurez besoins des dépendances suivantes :

apt-get install inkscape pdflatex texlive-base texlive-lang-french texlive-latex-base

Pour les formats HTML et LaTeX, l'option --template permet d'appliquer un thème. Par exemple, l'option --template report permet de générer la table de matières à partir de vos balises h1 à h6 (ou # - #####). Les options --template basic et --template full utilisées avec le format HTML permettent de choisir entre une version simplifiée (sans entêtes HTML) pour les blogs/pages web et un rendu HTML statique complet. Vous avez aussi la possibilité de convertir les fichiers via le menu File > download as. Le format slides permet de générer une présentation avec diapositives animées avec JavaScript (Reveal.js). Pour convertir et activer une présentation directement dans votre navigateur, il suffit d'ajouter l'option --post serve :

jupyter nbconvert mon_fichier.ipynb --to slides

jupyter nbconvert mon_fichier.ipynb --to slides --post serve

Les diapositives générées à partir de votre fichier Notebook ont par défaut une barre de progression automatique et une interface de défilement à l'aide de flèches (droite-gauche, haut-bas) sympathique.

Attention !

Une liste déroulante dans la barre d'outils Cell Toolbar > Slideshow vous permet de définir le contenu de chaque diapositive. L'option Slide Type > Slide appliquée à une cellule définit une diapositive. Les options Sub-slide et fragment permettent d'ajouter d'autres cellules à la diapositive. L'option Sub-slide incrémentera la barre de progression contrairement à l'option fragment qui fait juste apparaître des éléments suivants.

Si vous voulez partager ou visionner rapidement un fichier Notebook et vous ne souhaitez pas vous préoccuper du rendu et de l’intégration du HTML, ou simplement vous ne pouvez pas le faire, vous pouvez utiliser le service http://nbviewer.jupyter.org. Sur cette page, il suffit d'indiquer simplement l'adresse URL d'un fichier .ipynb pour récupérer après quelques instants un lien d'une version en HTML.

1.6 Jupyter, des langages à volonté

J'ai gardé le meilleur pour la fin. L'un des objectifs du projet Jupyter est la gestion de multiples langages de programmation, une cinquantaine est disponible au jour de la rédaction de cet article. Cependant, il est nécessaire de rester attentif durant leur installation, car en fonction de votre configuration vous pourrez parfois rencontrer des problèmes. Néanmoins, vous allez réussir comme moi à intégrer la plupart d’entre eux dans l’interface principale de Jupyter. Voici quelques exemples testés sur Ubuntu 14.04.

Bash

pip install bash_kernel

python -m bash_kernel.install

Comme le montre la Figure 4, votre navigateur réagit correctement aux commandes bash tout comme votre terminal.

echo "Exemple avec Bash"

a=lolo

cat /etc/passwd | grep $a

jupyter kernelspec list

test_bash

Figure 4 : Test du noyau Bash.

IJavascript : Si vous avez déjà IPython 4.0, n’installez pas: ipython-notebook. Exécutez une seul fois ijs.

sudo apt-get install nodejs-legacy npm libzmq-dev

sudo npm install -g ijavascript

sudo ijs

L'installation du noyau IJavascript varie en fonction du système d’exploitation. Vérifiez Installation notes sur la page https://www.npmjs.com/package/ijavascript. En cas de besoin, installez nodejs > 0.10.

Un test très simple permet de vérifier les fonctionnalités de base (figure 5) :

/* 1ere cellule - sortie html */

$$html$$ = "<button type='button'>Click !</button>";

/* 2eme cellule – image SVG */

var msg = ["Exemple","avec","IJavascript"].join(" ")

$$async$$ = true;

console.log(msg);

setTimeout(

function() { $$svg$$ = "<svg><circle cx='30px' cy='30px' r='20px'/></svg>";

$$done$$();}, 1000 );

test_javascript

Figure 5 : Test du noyau IJavascript.

Scilab

sudo apt-get install scilab

sudo pip3 install scilab2py

git clone https://github.com/blink1073/scilab_kernel.git

cd scilab_kernel

sudo python3 setup.py build

sudo python3 setup.py install

Octave

sudo apt-get install octave

pip3 install octave_kernel

Comme dans les versions précédentes du Notebook, vous avez la possibilité d'utiliser dans votre document n’importe quel langage grâce à la fonction magique %%script à condition bien sûr, que ce langage soit déjà installé sur votre machine. Par exemple, j'ai pu tester dans cinq cellules consécutives l’exécution des scripts JavaScript, PHP, HTML et Julia (figure 6).

%%script php

<?php echo "Linux Pratique numéro ".strval(80+12);?>


%%html

<p id="st">Linux Pratique numéro 92</p>


%%javascript // agit sur l'élément <p> id="syl" (Figure 2)

element = document.getElementById("numero")

element.style.color = 'blue'

On remarque que la couleur de la police du paragraphe id="st" a changé (noir → bleue)

%%script julia

function x2x(x::Int)

res = x ^ x

end

println("résultat= ",x2x(2))

Si vous utilisez un langage compilé comme Fortran, vous pouvez installer une extension fortranmagic à l'aide des fonction magiques %install_ext et %load.

%install_ext https://raw.github.com/mgaitan/fortran_magic/master/fortranmagic.py

%load_ext fortranmagic

La fonction saisie (ici x2y) sera enregistrée dans un fichier fortran que vous retrouverez dans le répertoire $HOME/.cache/ipython/fortran/, ensuite ce fichier est compilé :

%%fortran

subroutine x2y(x,y,z)

real, intent(in) :: x,y

real, intent(out) :: z

z = x**y

end subroutine x2y

Grâce au module f2py, lors de l'appel à la fonction, le résultat est retourné sous Notebook (figure 6).

a = x2y(2,4) # appel à x2y sous Python

print(a)

Finalement, un test d'une fonction similaire avec Julia :

%%script julia

function x2x(x::Int)

res = x ^ x

end

println("résultat= ",x2x(2))

figure6

Figure 6 : Test d’exécution avec %%script.

Conclusion

Grâce à sa polyvalence, le projet Jupyter constitue un superbe outil de travail et d’apprentissage. Mais comme chaque projet de cette ampleur, Jupyter a ces petits défauts. On constate surtout un certain nombre de problèmes durant l'installation des noyaux. On constate aussi un manque, parfois cruel, de documentation compréhensible pour les nouveaux utilisateurs. On apprécie par contre les efforts apportés par la communauté dans le développement du projet Jupyter et des projets « satellites ». Plusieurs projets visant le déploiement et le travail collaboratif sont déjà disponibles. Il s’agit de Jupyter Hub, Jupyter Drive et nbgrader. Tous les trois risquent d’intéresser les professionnels de la formation et les petites entreprises. Ce qu'on peut souhaiter voir dans le futur : une extension pour corriger l’orthographe française, le développement de la représentation statique HTML des widgets et surtout un outil d'édition des thèmes qui devrait apparaître avec les prochaines versions de Jupyter.

Références

La page du projet Jupyter : https://jupyter.org

Installation LaTex pour Ubuntu : http://doc.ubuntu-fr.org/latex

La doc : http://jupyter.readthedocs.org

Installation nodejs : https://github.com/nodesource/distributions


Sur le même sujet

Machine Learning sur des objets connectés avec TensorFlow Lite pour l’agriculture verticale

Magazine
Marque
GNU/Linux Magazine
Numéro
239
|
Mois de parution
juillet 2020
|
Domaines
Résumé

Tout au long de cet article, nous verrons comment déployer des algorithmes de Deep Learning sur des objets connectés grâce à TensorFlow Lite. Nous verrons comment l’utiliser pour concevoir une « ferme verticale » capable de prédire et optimiser la production de légumes, aussi bien chez soi que dans des pays en voie de développement où la connexion internet est intermittente.

À la découverte de Godot

Magazine
Marque
GNU/Linux Magazine
HS n°
Numéro
109
|
Mois de parution
juillet 2020
|
Domaines
Résumé
  • Godot ? D'habitude on l'attend, on ne le découvre pas, comme dans la pièce de théâtre de Samuel Beckett...
  • Je parle du moteur 3D.
  • Un moteur 3D ? Non, je connais Unity, Unreal Engine, mais pas celui-là.
  • Alors, découvrons dans cet article Godot, « The game engine you waited for ».

Émulation d’un circuit comportant un processeur Atmel avec simavr

Magazine
Marque
Hackable
Numéro
34
|
Mois de parution
juillet 2020
|
Domaines
Résumé

Il existe de nombreux cas où le matériel n’est pas disponible pour développer un système embarqué, que ce soit parce que la carte commandée n’a pas encore été livrée, parce que le collègue chargé de la conception du circuit imprimé a fait une erreur ou est en retard, ou parce qu’un virus interdit l’accès aux salles de travaux pratiques de l’Université (Fig. 1). Pour toutes ces raisons, nous désirons appréhender le développement d’un système embarqué sur un émulateur, c’est-à-dire un logiciel capable de fournir une représentation fidèle du comportement du dispositif réel, incluant ses latences et temporisations.

Utilisez tout le potentiel de l'interface d'administration Django

Magazine
Marque
GNU/Linux Magazine
HS n°
Numéro
109
|
Mois de parution
juillet 2020
|
Domaines
Résumé

Django est le socle d’applications bâti au-dessus d’une base de données relationnelle qui est le plus populaire en Python. C’est d’ailleurs l’un des plus demandés sur le marché du travail, pour ceux qui souhaitent faire du Python.L’objectif de cet article est de présenter son interface d’administration et la manière de la personnaliser.

Les namespaces ou l’art de se démultiplier

Magazine
Marque
GNU/Linux Magazine
Numéro
239
|
Mois de parution
juillet 2020
|
Domaines
Résumé

Notions indispensables aux mécanismes d’isolation, mais plutôt méconnus du grand public, les namespaces sont devenus incontournables dans l’environnement Linux. Ils sont, le plus souvent, utilisés de manière implicite à travers les gestionnaires de conteneurs tels que LXC.

Pilotez de manière optimale vos afficheurs LED

Magazine
Marque
Hackable
Numéro
34
|
Mois de parution
juillet 2020
|
Domaines
Résumé

Trop souvent, dans les forums et/ou sur les sites web, certains ont tendance à conseiller l'approche « facile » plutôt que l'approche « efficace ». Qui n'a jamais vu un jour quelqu'un répondre « mais utilises donc xxx(), ça marche et c'est plus simple » en réponse à une problématique précise ? C'est là, généralement, le fait de personnes qui n'ont que peu d'expérience ou ne comprennent simplement pas la motivation du demandeur. Voici une petite réalisation destinée à mettre en évidence non seulement l'intérêt de « creuser un peu », mais également une bonne raison de mitiger la valeur des conseils trop rapidement prodigués.

Par le même auteur