IPython est un des outils qui me font trouver la programmation Python plus agréable que dans tous les autres langages : un shell avec tellement d’astuces intégrées que ça donne envie de vomir des arc-en-ciel.
Aujourd’hui je vais vous parler d’une fonctionnalité fantastique est très peu connue de IPython : le notebook.
Si vous êtes scientifique ou manipulez pas mal de graphiques et de données numériques, c’est un must have. Mais personnellement je trouve que c’est aussi un fantastique outil d’éducation, c’est génial pour les cours, les démos, et expérimenter avec du code inconnu.
Ça se présente sous la forme d’un shell IPython intégré dans une page Web, mais que l’on peut avoir sur son desktop, pas besoin d’avoir un serveur distant. Si vous avez un peu de temps, voici une vidéo de démo (avec un musique horrible) :
L’installation sous Ubuntu, c’est juste :
sudo apt-get install ipython-notebook |
Pour Windows, il me semble, de mémoire, que c’est intégré dans l’exe. Pour Mac, je ne sais pas.
Et derrière il suffit de lancer la commande :
ipython notebook |
Et il va vous ouvrir votre navigateur avec un onglet sur votre notebook.
L’intérêt principal du notebook est que TOUT le code est coloré et est modifiable comme sur dans fichier mais TOUT le code est exécutable (et affiche son résultat juste après chaque ligne) comme dans un shell iPython, avec completion du code. Le meilleur des deux mondes quoi.
En prime on peut embeder du markdown (et donc des liens, des images, etc) dans le même notebook, sauvegarder ça pour plus tard, le partager, etc.
Personnellement, j’ai ceci dans mon .bashrc :
notebook () { processes=$(ps aux | grep -i -P "ipython notebook" | wc -l) if [[ $processes -lt 2 ]] then pushd /tmp nohup ipython notebook --port 8889 $1 & popd else firefox http://127.0.0.1:8889 fi } |
Comme ça en une commande je lance le serveur du notebook sur le port que je veux si il ne tourne pas, et si il tourne, j’ouvre firefox et ouvre un onglet dessus.
Quelques autres options très utiles :
–pylab : Charger plein de libs pour transformer IPython en un matlab killer.
–gui=lib : permet d’intégrer l’event loop de QT, wx, gtk, etc.
–ip=0.0.0.0 : si on veut que d’autres puisse accéder à notre notebook.
Il existe un espèce de pastebin spécialement fait pour le notebook, qui permet de partager ses expérimentations.
Merci pour ce petit article sur IPython, c’est agréable d’avoir un peu de resources en français
Juste quelque remarques cependant.
IPython avec un I majuscule (d’ailleurs le titre de cet article est I Maj, P min…) .
%pylab (dans la premiere cellule est) préferable à –pylab car on peut pas dé-pylab-er.
IPython marche aussi en Ruby: http://nbviewer.ipython.org/urls/raw.github.com/minad/iruby/master/IRuby-Example.ipynb
en Julia
http://nbviewer.ipython.org/url/jdj.mit.edu/~stevenj/IJulia%2520Preview.ipynb
Scala
https://github.com/mattpap/IScala
et Haskell
https://github.com/gibiansky/IHaskell
Punaise, il a fait du chemin le langage Julia. maintenant il peut même importer les modules python. Je vais suivre ça de près !
Très article!
Je voulais plutôt écrire très génial article ;)
Et il parait qu’il y a même un plugin pour votre éditeur préféré : Sublime IPython Notebook :)
Ouai mais j’ai pas réussi à le faire marcher.
La vache! C’est vrai qu’elle est horrible la musique de la vidéo!!
Merci pour cet article.
Une remarque qui n’as pas grand chose à voir avec ipython/python.
En shell script, il faut éviter les “ps aux | grep”. Ce type de chaines de commandes est susceptible à une floppée de race conditions (d’où le test un peu curieux où on s’attends à avoir deux processus apparaitre).
A moins d’être coincé sur un vieux UNIX d’entant, il vaut mieux utiliser pgrep.
Par exemple, pgrep -f “ipython notebook”
Plus d’informations sont disponibles sur ce wiki: http://mywiki.wooledge.org/BashPitfalls#ps_ax_.7C_grep_gedit
(en fait c’est pas tellement vrai, mais il y a plein de choses qui sont bonnes à savoir si on fait du bash et qu’on veut éviter les pièges usuels, donc je le link :-) )
Merci!
y-a t’il moyen de taper depuis vim et d’avoir le rendu à coté ?
Je n’en connais pas.
> y-a t’il moyen de taper depuis vim et d’avoir le rendu à coté ?
Techniquement oui. vim-ipython se connecte a IPython kernel, et le kernel publie ses resultats sur un Socket ZMQ qui broadcast. Les clients actuels sont codé pour ignorer les réponses aux requêtes qu’ils n’ont pas initiés. Il “suffirait” juste de faire un client qui affiche tout ce qu’il voit passer, mais en pratique ça intéresse personne donc personne ne l’as codé.
Bon, ça fait un moment que je suis ce blog — sans commenter parce que je suis un flemmard — mais comme j’ai une question, c’est aussi une bonne occaz’ pour vous remercier des posts que vous faites, c’est hyper intéressants, j’ai appris une tonne de trucs (mais y’a encore un max de trucs que je ne comprends pas).
Et là, le note-book pour moi qui fait de la recherche, c’est LE truc de ouf. Bon, du coup je me suis mis un peu plus sérieusement à Ipython, et j’ai essayé de configurer, en suivant vos autres articles sur le sujet. Et je suis tombé sur un os avec sublime text 2 (que j’utilise grace à vous également) en voulant l’utiliser avec %edit, j’obtiens à chaque fois un truc du genre:
WARNING: Could not open file for safe execution.WARNING: File not found. Did you forget to save?
et ce, avant meme d’avoir pu fermer le fichier qu’il m’ouvre sous sublime. Une idée ?
En passant, un truc intéressant : j’ai installé le note-book avant de générer le fichier de config pour ipython, et j’ai remarqué que du coup il en a généré deux, le deuxième (ipython_notebook_config.py) étant manifestement lié au note-book seul…
Oula man, pour un truc aussi précis vaut mieux aller sur un forum, un stackoverflow like ou carrément sur le issue tracker de ipython. Le blog c’est vraiment pas un outil pour dépanner.
@Josh
%edit doit surement attendre que la commande qui appel l’éditeur de text soit bloquante, ce que sublime ne dois pas être par default.
essaye d’ajouter l’option -w (Wait for the files to be closed before returning)
http://www.sublimetext.com/docs/2/osx_command_line.html
C’est une limitation très difficile a contournée si l’éditeur n’as ni wait options, ni plugin qui s’adresse directement au kernel IPython.
Sinon oui, il y a plusieurs fichiers de config 1 global + 1 par frontend, ce qui permet d’avoir des options différentes.
On peut discuter de ça sur IPython-dev(at)scipy.org il y a pas mal de français dessus si l’anglais te fait peur.
@Sam: bah, c’était surtout un prétexte pour faire un coucou ^^.
@Matthias: bien joué, un “-w” a réglé le problème. Merci!
En passant, une info qui peut etre intéressante pour d’autres: apparemment, pour faire des imports au démarrage dans le notebook, le fichier de config de ipython ne suffit pas, et celui de notebook n’a pas cette option. D’après une discussion sur le forum d’aide de notebook, il faut faire un script dans startup/.
> apparemment, pour faire des imports au démarrage dans le notebook, le fichier de config de ipython ne suffit pas, et celui de notebook n’a pas cette option.
Vraiment ?… pour être familier avec le fonctionnement interne, ca ne devrais pas être le cas.
Vu que tous les fichiers de config sont éxécutés dans un meme namespace.
(Ce n’est pas parceque l’option apparait pas commentée qu’elle existe pas.)
Ce que Min a répondu sur hipchat était la solution de facilité je pense. Je vais vérifier.
> D’après une discussion sur le forum d’aide de notebook, il faut faire un script dans startup/.
Il y a une legère différence entre les deux (si je me souviens bien) dans certains cas comme `from __future__ import …` qui marche dans l’un et pas dans l’autre.
je confirme
`c.InteractiveShellApp.exec_lines = [‘yes=False’,’import pandas as ppp’]`
fait bien ce qu’on pense si mis dans `ipython_notebook_config.py`
Sur la dev-version, on peut meme faire `c.InteractiveShellApp.exec_lines.extend([‘yes=False’,’import pandas as ppp’]`) et ça concatene avec les valeurs définies dans `ipython_config.py`..mais je m’égare.
Au temps pour moi, j’aurais du tester l’option direct. Et d’ailleurs je m’attendais à un comportement comme celui de la dev-version.
@Josh bon bah je vais utiliser ton message d’erreur pour faire l’article du jour, comme ça si quelqu’un d’autre se pose la question, il aura la réponse cash pistache.
Ce qui est génial également avec le notebook, c’est que l’on peut se les partager avec le site http://nbviewer.ipython.org/ et ainsi partager ses connaissances facilement.
Trop cool ! Mais comment je peux faire pour avoir accès à mon virtualenv depuis le notebook ?
Il suffit d’installer ipython dans le virtual env.