Sortie d’IPython en version 2.0

Posté par . Édité par palm123, BAud, Benoît Sibaud, Jiehong, Davy Defaud, NeoX, jcr83, Nonolapéro et Nÿco. Modéré par Nÿco. Licence CC by-sa
34
6
avr.
2014
Python

IPython est une console alternative principalement tournée vers l’exploration interactive des données. Comme tous les 6 mois maintenant (avec 3 mois de retard), la nouvelle version est publiée. Je vous invite à aller lire les dépêches précédentes si vous ne connaissez pas IPython.

Au‐delà d’une simple console Python, elle est aussi agnostique au niveau du langage en offrant une console Qt, un notebook Web (interface Web riche) et l’architecture pour y écrire dans son dialecte préféré.

Pour rappel, IPython 2.0 est la seconde des quatre versions qui seront publiées sur les fonds donnés par la fondation Sloan sur une durée de deux ans. Je vais ici vous présenter quelques nouveautés qui ont été développées lors des 9 derniers mois et vous donner un avant‐goût de ce qui est prévu pour le mois à venir.

Merci aux participants qui m’ont aidé à rédiger cette dépêche, corrigeant les fautes d’orthographe et les anglicismes.

Sommaire

Une fois n'est pas coutume, les notes de version sont disponibles sur le site web d’IPython, mais cette fois-ci la documentation officielle s'étoffe et utilise IPython Notebook viewer pour afficher les répertoires d'exemples. Ces notes sont plus complètes que la présente dépêche, mais on notera tout de même (cf. plus loin) que les Notebooks exportés en HTML avec nbconvert ou Nbviewer n'affichent pas les widgets et nécessitent d'être exécutés en local avec la nouvelle version.

En deux mots

Cette version de IPython a perdu son statut de rc le 2 avril (pour éviter un poisson), après plus de 8 mois de travail. On notera l'obligation d'utiliser Python 2.7 ou ≥ 3.3 (on s'excuse pour les gens encore sous 2.6 et 3.2), mais cela a permis l'unification du code source qui fonctionne indifféremment sur les deux versions majeures de l'interpréteur, sans avoir recours à des outils tels que 2to3.

Les grandes nouveautés sont toutes pour le Notebook :

  • Widget interactif javascript ;
  • navigation du disque dur ;
  • URL persistante ;
  • Interface modale ;
  • augmentation de la sécurité.

En chiffres, ou plutôt en nombres (arrondis à chaque fois) :

  • 8 mois de travail ;
  • 650 demandes d'intégrations pour 4000 modifications ;
  • 400 bogues fermés ;
  • 100 contributeurs (merci à eux !).

Ce que vous devez savoir

Interface modale

Les raccourcis clavier de l'interface du Notebook ont complètement changé. Les premières interactions avec le Notebook risqueront d'être bien difficiles (comparez à la première fois où vous avez utilisé Vim). Du fait des limitations des navigateurs web, ce changement était nécessaire, et implique quelques heures d'ajustement pour les utilisateurs déjà habitués aux raccourcis clavier. Allez faire un tour dans le menu d'aide si vous êtes perdu.

Tout comme beaucoup d'éditeurs modaux, vous pouvez vous trouver entre deux états, soit vous éditez une cellule et le clavier se comporte comme dans n'importe quel éditeur de texte classique (edit mode, utilisez Enter pour y accéder), ou en mode commande (Esc) les touches du clavier sont alors assignées à des actions, comme x pour couper, j pour sélectionner la cellule suivante… une introduction est bien sûr disponible pour les anglophones, lecture vivement conseillée, et sauvegarde préalable de vos .ipynb aussi.

Sécurité

Au sein de l'équipe de développement d’IPython, le Notebook tel que présent dans la 1.0 est comparé au bouton qui déclenche une bombe atomique enveloppée dans un joli bonbon qu'on tendrait à un nourrisson. Les capacités de destruction et de mauvaise utilisation sont particulièrement importantes. C'est pourquoi un modèle de sécurité a été adopté. À partir de maintenant, chaque Notebook est signé numériquement avec une clé privée générée au premier lancement, et tout chargement d'un Notebook dont la signature n'est pas valide désactive un grand nombre de fonctionnalités. En pratique, cela signifie que si M. ou Mme Michu™ vous envoient un Notebook, au chargement de celui-ci, vous ne pourrez voir que les jolis HTML et JavaScript qui affichent des chiots animés. Vous devrez ré-exécuter le Notebook dans son intégralité, ou explicitement lui faire confiance.

Cela ne signifie bien sûr pas que la sécurité est infaillible, on appréciera aussi tout retour d'expérience de personnes plus compétentes au niveau cryptographie. On notera que le système est à priori extensible, donc oui, utilisateur motivé de LinuxFr.org, tu devrais pouvoir écrire une extension qui utilise GPG.

Le Beau et Brillant

Le schéma URL est maintenant REST, et persistant ! Vous n'avez plus besoin que de lancer un seul notebook server pour parcourir tout votre disque dur ! Même si on évite de servir des fichiers qui sont dans ~/.ssh, ne lancez pas le serveur n'importe où dans votre arborescence !

Vous pouvez aussi maintenant utiliser la fonction marque-page de votre butineur pour retrouver rapidement tous vos Notebooks.

nouvelle page d'accueil

Les widgets javascript

C'est beau, ça bouge, ça se manipule à la souris et c'est simple à utiliser, mais ça reste encore à peaufiner. Il vous suffit d'un simple décorateur sur une fonction pour que les paramètres de celle-ci soient accessibles avec de jolis éléments de GUI et au moindre changement le résultat se met à jour. Un peu comme ce bel exemple de Jake Van Der Plas.

Sous le capot c'est un protocole qui décrit une synchronisation, et ne suppose pas l'utilisation de JavaScript. Sachant qu’un greffon pour Emacs permet déjà de se connecter au Notebook, rien ne vous empêche de réaliser les widgets pour Emacs en utilisant lisp. Ceci devrait aussi permettre aux autres langages de réutiliser les mêmes widgets. Pour les impatients, vous trouverez une vidéo de B. Granger lors de PyData 2014, avec une démonstration des widgets (la vidéo démarre à la 34 ème minute).

capture d'ecran des widget

Avec l'implémentation actuelle, la création de widget et leur affichage nécessite un noyau actif. De ce fait, l'export de Notebook en HTML ne conserve pas les widgets. Nbviewer utilisant l'export en HTML, vous ne verrez donc pas de widgets à moins de télécharger le Notebook qui vous intéresse et de l'exécuter en local (on travaille dessus).

La suite

Multi-language

Pour ceux qui n'auraient pas suivi, ou qui liraient en diagonal, IPython permet d'écrire en utilisant un autre langage que Python, vous pouvez probablement écrire en quelques lignes un noyau Evenja, en plus des nombreux noyaux déjà existants, l'un des soucis étant qu'il faut démarrer autant de serveurs que de langages demandés. La version 3.0 devrait commencer à remédier à ce problème en proposant de choisir parmi les noyaux installés lors de l'ouverture d'un Notebook.

Multi-utilisateur

On ne parle pas encore de collaboration en direct, mais de la possibilité de démarrer un seul serveur pour de multiples utilisateurs dans un premier temps. Le but initial ne sera pas de permettre un déploiement pour des centaines d'utilisateurs simultanés, mais plus de l'ordre de grandeur d'un petit laboratoire de recherche, ou dans le cadre d'un enseignant utilisant le Notebook pour ses élèves. Cette fonction ne sera probablement pas complète pour la version 3.0 (été 2014), mais devrait, on l'espère, être utilisable pour 4.0 (hiver 2014).

Le reste

Les réunions

Tous les jeudis, en direct sur youtube/Google Hangout vers 19h, réunion technique sur l'avancement du projet et le futur. Si vous voulez parler avec nous de votre projet d'amélioration, demandez une invitation.

Un mardi par mois, à 19h aussi, venez poser vos questions, on fera de notre mieux pour vous aider à faire ce que vous voulez avec IPython (en anglais, of course).

Nbviewer

Nbviewer a été déplacé de Heroku à Rackspace qui nous offre une réduction sur le prix des serveurs non négligeable, et Kyle Kelley s'occupe du déploiement ; si vous le croisez, lui ou Jesse Noller, remerciez-les !

  • # Commencement

    Posté par (page perso) . Évalué à 6.

    J'ai vraiment envie de m'y mettre. Je suis sur que ça pourrait être terrible pour mon boulot (prof de maths).

    J'ai déjà quelques bases en python, vous me conseillez quoi pour comprendre un peu plus comment marche ipython ?

    La réalité, c'est ce qui continue d'exister quand on cesse d'y croire - Philip K. Dick

    • [^] # Re: Commencement

      Posté par . Évalué à 9.

      Ça va majoritairement dépendre à quel point les ressources que tu désire doivent être en français ou pas, et de quels domaines en math tu veux enseigner. On n'a pas encore eu de retour sur les widgets pour l'enseignement, mais vu que IPython est utilisé dans quelques endroits au US les retours devraient être rapide.

      Il faut voir que finalement IPython est peu différent de Python et n'apporte presque que des fonctionnalité supplémentaire.
      Il suffit de faire Shift-Enter pour exécuter dans le notebook et c'est suffisant pour démarrer, le reste s'apprends "sur le tas", et un grand nombre d'exemple sont disponibles dans IPython lui même : http://nbviewer.ipython.org/github/ipython/ipython/tree/master/examples/

      Pour trouver des ressources pour l'enseignement en France, et le python en particulier je regarderai du coté des classes CPGE, vu que python est au programme maintenant. De mémoire, Emanuelle Gouillart faisait parti des personnes chargée de mettre à niveau les professeurs donc elle doit avoir plus d'info, et une recherche google utilisant son nom ainsi que prepa et python renvoie vers https://github.com/python-prepa/python-prepa.

      Je suggérerai de déjà se familiariser avec le notebook, je ne crois pas connaitre de ressource complète en français pour son utilisation, mais c'est suffisament simple à prendre en main. Pour avoir une idée de ce qu'il existe cette page est intéressante : https://github.com/ipython/ipython/wiki/A-gallery-of-interesting-IPython-Notebooks

      Je suggérerai aussi un courriel à la liste de diffusion scipy qui doit avoir un nombre non négligeable d'utilisateur
      francophone, qui pourrons mieux répondre que moi.

  • # Raccourcis

    Posté par . Évalué à 2.

    Plein de nouveautés sympathiques, j'ai hate d'essayer ça. La seule chose qui me fasse peur est les nouveaux raccourcis.

    Enter command mode by pressing esc or using the mouse to click outside a cell's editor area.

    Esc n'est pas un bon raccourci, car sous certains navigateurs/OS (comme sous Mac), il a des effets de bord, comme quitter le plein écran. Sans raccourci alternatif, comme CM, ce n'est pas utilisable.

    • [^] # Re: Raccourcis

      Posté par . Évalué à 2.

      C'est un bon point, Je suggérerai de faire un rapport de bug si c'est le cas, on fera de notre possible pour corriger. Ctrl+M devrais néanmoins avoir le même effet que esc, même si non documenté.

      • [^] # Re: Raccourcis

        Posté par . Évalué à 2.

        Ctrl+M devrais néanmoins avoir le même effet que esc, même si non documenté.

        Oui c'est le cas et c'est documenté, en fait.

        • [^] # Re: Raccourcis

          Posté par . Évalué à 2.

          Cool, mes bugs sont résolus avant que je les rencontrent :)

  • # Correction

    Posté par (page perso) . Évalué à 3.

    Je ne suis pas sûr à 100% mais je n'aurais pas utilisé le futur ici :

    Je vous inviterai à aller lire les dépêches précédentes si vous ne connaissez pas IPython.

    Je vous invite à aller lire les dépêches précédentes si vous ne connaissez pas IPython.

    ou

    Je vous inviterais à aller lire les dépêches précédentes, si vous ne connaissez pas IPython.

  • # En parlant de Python....

    Posté par . Évalué à 3.

    Dropbox vient de publier une éauche d'un nouvel interpréteur Python de leur cru :

    https://tech.dropbox.com/2014/04/introducing-pyston-an-upcoming-jit-based-python-implementation/

    • [^] # Re: En parlant de Python....

      Posté par . Évalué à 2.

      En effet j'ai vu ça passé. Je suppose qu'une magique %pyston devrais être possible assez facilement. À première vu, Pyston ressemble pas mal à Numba et le principe du JIT est aussi utilisé par pypy. Je ne suis pas expert dans le domaine, mais je pense que Python manque de la possibilité de faire des annotation de types et d'avoir (optionellement) un typage static pour véritablement atteindre le maximum de performances (annotations en python 3 ?) . Je pense que de ce coté Julia peux potentiellement avoir de sérieux avantages.

      • [^] # Re: En parlant de Python....

        Posté par (page perso) . Évalué à 2.

        Je suis tout à fait d'accord, un type statique manque quand même un peu.

        Ça me ferait penser à un truc sympa en Objective-C (que je ne connais pas spécialement, aussi j'espère ne pas raconter trop de bêtise) : on peut faire à la fois du typage statique ou du typage dynamique (en disant que l'objet est de classe Object sans préciser outre mesure).

        Malheureusement, les annotations Python 3 ne sont pas destinées à ça (plutôt pour de l'aide au typage pour les IDE)

        • [^] # Re: En parlant de Python....

          Posté par . Évalué à 1.

          En C#, on peut spécifier qu'on a un object (mais ça reste du typage statique -> vérifié par le compilateur), ou utiliser un type dynamic dont les appels sont résolus à l'exécution (grâce au Dynamic Language Runtime).

          "Quand certains râlent contre systemd, d'autres s'attaquent aux vrais problèmes." (merci Sinma !)

  • # Bravo et merci

    Posté par . Évalué à 6.

    Je ne dirai pas que le notebook ipython a changé ma vie, mais très certainement ma manière de bosser, en beaucoup mieux.

    Merci encore aux devs.

    Je trouve vraiment génial de pouvoir 'montrer du code' sans faire peur à monsieur tout le monde. La 'programmation lettrée' a enfin tout son sens.

    Enfin j'applaudis le prof de math, j'essaie de convaincre mes potes qui font ce noble métier d'adopter le notebook, mais c'est pas facile.

    • [^] # Re: Bravo et merci

      Posté par . Évalué à 3.

      Je transmettrai de vive voix à Fernando Pérez lors de PyCon 2014 d'ici quelques jours.

      Quand à la programmation lettrée, on bosse sur la possibilité de référencer les variables dans le markdown un genre de x = {{x}} qui serait interprété.

      • [^] # Re: Bravo et merci

        Posté par . Évalué à 1.

        Oui j'ai eu très envie de faire ça l'autre jour (pour du texte répétitif avec seulement quelques variables qui changeaient) et j'ai trouvé que faire du formatage de string en markdown puis du rendu html avec IPython.disp.HTML était un peu tortueux…

  • # Compatibilité

    Posté par . Évalué à 2.

    A quelle compatibilité s'attendre ? J'ai cru comprendre qu'un notebook déjà existant tournera sans problème sous 2.0, mais est-ce possible d'alterner entre l'édition par 1.x et par 2.0 ?

    • [^] # Re: Compatibilité

      Posté par . Évalué à 2.

      j'ai tout ré-ouvert sans problème personnellement.

      Je ne sais plus pour quel saut de version il y avait une rupture dans le sens nouvelle -> ancienne. Je n'ai pas essayé d'ouvrir des notebooks créés en 2.0 en 1.x ceci dit.

      • [^] # Re: Compatibilité

        Posté par . Évalué à 3.

        A priori le format de donnée est inchangé, donc une compatibilité 2.0 <-> 1.0 à priori de 100%.
        Lors de changement non compatible il y aura une item "exporter pour une version antérieur" dans les menus, et/ou un utilitaire pour faire des conversion en masse.

  • # nbconvert

    Posté par . Évalué à 1.

    Une question, est-t-il possible avec nbconvert de convertir simplement le résultat de l’exécution des cellules et de cacher le contenu des cellules ( In[*] ) ?

    autre point ipython avait tendance a être lent a l'initialisation quand le PYTHONPATH ou le ~/.local/lib/python2.7/site-package/ contenaient beaucoup de librairies, je note un très nette amélioration de ce cote avec la version 2.0 .

    Une remarque, chez moi ipython utilise maintenant python3 par défaut. il faut utiliser ipython2 pour python 2.7 , cela est-il par défaut ou cela vient-il du fait que j'ai installe ipython3 apres ipython ( pip install ipython puis python3-pip install ipython ).

    j'en profite pour remercier les dev pour ce formidable outil.

    merci

    • [^] # Re: nbconvert

      Posté par . Évalué à 2.

      Une question, est-t-il possible avec nbconvert de convertir simplement le résultat de l’exécution des cellules et de cacher le contenu des cellules ( In[*] ) ?

      Oui, tu peux créer un template dans le dossier courant qui hérite du template qui t'intéresse , et replace le block {%- block input_group -%} par in block vide puis d'utiliser ipython nbconvert --to .. --templae=mytemplate.tpl, tu devrais trouver des examples ici

      autre point ipython avait tendance a être lent a l'initialisation quand le PYTHONPATH ou le ~/.local/lib/python2.7/site-package/ contenaient beaucoup de librairies, je note un très nette amélioration de ce cote avec la version 2.0 .

      Cool.

      Une remarque, chez moi ipython utilise maintenant python3 par défaut. il faut utiliser ipython2 pour python 2.7 , cela est-il par défaut ou cela vient-il du fait que j'ai installe ipython3 apres ipython ( pip install ipython puis python3-pip install ipython ).

      Oui, installer avec pythonX installe ipython et ipythonX.

      j'en profite pour remercier les dev pour ce formidable outil.

      Je suis à Pycon Montréal, je transmet.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.