Sortie d'IPython 1.0

Posté par  . Édité par Jiehong, Benoît, palm123, jcr83, Nonolapéro, JPEC et Nÿco. Modéré par patrick_g. Licence CC By‑SA.
Étiquettes :
31
10
août
2013
Python

On ne présente plus IPython, qui est (aussi) une console alternative principalement tournée vers l'exploration interactive des données. Ce projet contient aussi différents terminaux riches capable d'afficher plus que du texte (image/HTML), et en particulier le développement du Notebook, mais aussi une bibliothèque de calcul parallèle et bien d'autre outils.

Cette année fut bonne pour IPython avec son créateur recevant un FSF award et l'obtention de deux ans de financement. Ce fut donc l'occasion d'espacer un peu les sorties pour consolider les fondations avant d'apporter de nouvelles fonctionnalités.

Merci à Benoît, Jiehong, jcr83, Nonolapéro, Peck et palm123 pour l'aide et l'aurthografe.

Sommaire

Petite note personnelle avant de commencer.

J'ai eu le plaisir de passer 5 jours à Berkeley où la majorité des Core Développeurs était présente (tu nous as manqué, Thomas), ce qui fut l'occasion de finaliser la 1.0.0.alpha, de discuter de la 2.0 (décembre 2013) et de revenir sur presque un an de développement depuis la précédente version stable. Je tiens donc à remercier tous les développeurs présents (ou pas) lors de cette semaine, pour les bons moments passés. Il y avait pas mal d'utilisateurs aussi, mais comme tous sont repartis avec au moins un changement dans IPython, je nous considère comme des développeurs maintenant.

Une version 1.0 tant attendue

C'est finalement après 12 ans qu'IPython 1.0 est publié. Bien que les versions 0.x aient été considérées comme stables, le passage à 1.0 reste fort symboliquement de par les nouvelles fonctionnalités, mais aussi, car c'est la première des 4 versions qui va être publiée grâce à un financement de la sloan foundation. Le lecteur attentif des releases notes, remarquera que cette version de IPython est la première à avoir un nom de code : « Hack d'un après-midi » (An afternoon hack), petite référence à l'après-midi durant lequel Fernando Pérez coda un petit script nommé IPython 0.0.1.

Court récapitulatif :

  • 1 an de travail ;
  • 700 demandes d'ajout ;
  • 600 bogues corrigés ;
  • 150 développeurs ;
  • 4000 changements.

Quoi de neuf ?

Beaucoup. Pour une description complète des changements d'API, et de ce que vous devrez changer dans votre code pour être compatible, je conseille d'aller lire les notes de version en anglais. Mais voyons ce qu'il y a de plus important.

NbConvert

Nbconvert était le petit nom donné à l'interface en ligne de commande qui servait à convertir les fichiers du notebook (.ipynb) vers tout un tas d'autres formats (non, .xlsx n'était pas pris en charge). Cet utilitaire vivait dans un dépôt à part d'IPython, et fait maintenant partie du cœur de l'application. C'est aussi devenu une bibliothèque Python : vous pouvez donc maintenant l'importer dans vos petits programmes et faire plein de jolies choses avec. Attention, cependant, c'est une vitrine technologique ; la documentation accompagnant nbconvert est donc incomplète, et l'API encore changeante. On trouve cependant déjà deux générateurs de blogues statiques qui l'utilisent déjà.

Notebook serveur

Convertir des notebooks vers d'autres formats c'est bien. Créer des fichiers JSON à la main c'est plus dur. C'est pourquoi l'interface web pour éditer les notebooks s'est encore améliorée. Sous le capot on continue d'apprendre le javascript et le CSS et on utilise bootstrap et less. Côté javascript, on commence à modulariser et à gérer les dépendances avec bower. Ainsi, on a un tout nouveau thème plus agréable à regarder, et un peu plus adapté aux écrans à haute densité de pixels.

Il est aussi maintenant possible d'attacher des données JSON arbitraires à chaque cellule du notebook, qui peuvent être utilisées lors de la conversion vers d'autres formats pour en faire ce que bon vous semble.

Détail, mais non des moindres, STDIN est maintenant pleinement pris en charge, donc vous pouvez joyeusement faire planter vos programmes et vous balader dans la pile d'éxecution avec le débogueur, maintenant ça marche !

Pour les petits étourdis qui ne sauvegardent pas souvent, il y a maintenant une sauvegarde automatique, et l'action de sauvegarder explicitement (nommée checkpoint) garde trace de la dernière version. Une sorte de gestionnaire de version avec un seul changement pour l'instant, mais qui devrait pouvoir s'interfacer au cours des prochaines années avec git/hg/darcs pour le plaisir des plus geeks sans pour autant rebuter Madame Michu.

Plein de nouvelles « cell-magics » (%%latex , %%svg, %%html…) toujours aussi simples à définir soi-même, et elles rendent le travail interactif avec les données encore plus simple.

Ce que l'on ne vous dit pas

Les notes de version c'est bien, mais ça ne dit pas tout sur ce qui se passe autour du développement lui-même.

Mauvaises nouvelles

Parce qu'il en faut bien, commençons par les mauvaises nouvelles. Bon, « mauvaise » ce n'est souvent qu'un point de vue.

IPython 1.0 sera certainement la dernière version à prendre en charge Python 2.6 et 3.2. Ce changement est nécessaire pour avoir un code qui fonctionne à la fois sur 2.x et 3.x sans utiliser l'outil de conversion 2to3.

Malgré le numéro de version 1.0, certaines API changeront dans les 6 prochains mois. Donc renseignez-vous si vous comptez vous intégrer profondément avec IPython, en particulier au niveau de la structure des fichiers .ipynb et de NbConvert. Les changements ont déjà été plus ou moins planifiés, cherchez la feuille de route pour 2.0 qui sera sur le wiki d'ici quelques semaines. Rassurez-vous, c'est pour votre bien, et pour avoir encore plus de fonctionnalités :-)

Beaucoup de demandes de fonctionnalités sont refusées malgré le grand nombre de contributeurs. En effet, peu de gens aident à maintenir leurs correctifs ainsi que le cœur d’IPython. On fait cependant de notre mieux pour permettre à ces fonctionnalités de revenir sous forme de greffons. Je conseille Pourquoi vous devriez écrire des logiciels pleins de bogues et sans fonctionnalités (en) par B. Granger, l'un des principaux développeurs d’IPython. On ne refuse pas pour autant toutes les contributions, et on vous guidera toujours sur la manière d’ajouter telle ou telle fonctionnalité si vous pointez votre museau sur GitHub ou la liste de diffusion avec un peu de motivation. Aucune question ou proposition de correctif n'est mauvaise, mal codée ou bête, ne soyez pas timide.

Bonnes nouvelles

Mention spéciale à un nouveau contributeur qui a contribué pour l'instant uniquement à la documentation. Il a probablement écrit plus de documentation en quelques semaines que n'importe lequel des autres développeurs depuis le début de l'année. Étant donné qu'il ne connait pas encore bien le fonctionnement interne d’IPython, cette nouvelle documentation est bien plus accessible au débutant car sans détails superflus. Il amène aussi quelques idées fraîches et nous permet de voir à quoi ressemble le projet vu de l'extérieur.

Options cachées

Dans Python

Il y en a une multitude. Il suffit de taper ipython <subcommand> --help-all pour en avoir une idée. J'aime en particulier celle qui permet de spécifier un secret pour le cookie d'authentification, je n'ai plus à entrer mon mot de passe à chaque redémarrage du serveur web !

Dans Javascript

De nombreux évènements sont déclenchés pour pratiquement chacune des actions que vous effectuez. Ceci, ajouté à la possibilité d'injecter du javascript dans le notebook à l'aide de custom.js, vous permet de configurer énormément le notebook. Fans d'Emacs ou de Vim ? Vous devriez pouvoir changer les raccourcis clavier en quelques lignes de javascript. Il faut aller lire le code pour trouver les méthodes exposées, mais il n'est pas trop compliqué d'avoir une fonction qui déclenche la machine à café toutes les 20 lignes de code.

Les autres langages

Depuis la version 0.11 et l'architecture client–noyau séparés, IPython tente une approche aussi agnostique que possible de son protocole. Cette affirmation s'est vue pratiquement confirmée lors de la semaine du 21 au 28 juillet : en quelques jours, les développeurs du langage Julia ont été capables de créer un noyau Julia natif pour IPython (IJulia), en comptant l'écriture des bibliothèques d'encodage en base 64, de hachage md5 et sha256, etc. Il reste quelques bogues, mais maintenant qu'IPython 1.0 est publié, ils disposent en 5 lignes de configuration de la qtconsole, du notebook (et donc du client Emacs et Vim) pour leur langage. Duplication de code : zéro. On espère que cela inspirera d'autres personnes pour écrire des noyaux dans leurs langages préférés. J'attends avec impatience les notebooks haskell, perl, ruby, etc.

La suite

Dans l'optique de mieux communiquer à propos de ce qui se passe lors du développement d’IPython, des conférences vidéo (Google Hangout) sont diffusées en direct (presque) tous les jeudis vers 19h, heure française. Une fenêtre de chat reste ouverte en permanence si vous voulez poser vos questions. Quelques développeurs parlent français, donc même si vous n'êtes pas à l'aise dans la langue de Shakespeare, on pourra quand même vous répondre.

Certains core développeurs seront présents à EuroSciPy fin août avec des autocollants IPython et une petite démo d'une heure et demie. Cyrile Rossant, l'auteur de « Learning IPython for Interactive Computing and Data Visualization » devrait aussi être là pour faire des dédicaces. J'évite de mettre des liens vers des sites commerciaux, mais je tiens à préciser que l'éditeur du livre reverse une partie des bénéfices des ventes à la communauté Open Source Python.

Une rencontre en personne tous les 6 mois à Berkeley où on discute de la feuille de route pour la version N+1, et où les gens qui sont dans le coin sont conviés à venir expliquer comment ils utilisent IPython. Si vous êtes du coté de San Francisco aux alentours de la première semaine de janvier 2014, passez dire bonjour (et voler un ou deux autocollants IPython).

Fin ?

Non, on se retrouve dans 5-6 mois (mi-décembre pour la 2.0). Moi je sais déjà ce qui a été prévu, mais pour l'instant je le garde pour moi, vous le découvrirez bien assez tôt !

Aller plus loin

  • # Haskell

    Posté par  . Évalué à 4. Dernière modification le 10 août 2013 à 19:41.

    On espère que cela inspirera d'autres personnes pour écrire des noyaux dans leurs langages préférés. J'attends avec impatience les notebooks haskell, perl, ruby, etc.

    Il y a ihaskell-notebook (repo github).

    • [^] # Re: Haskell

      Posté par  . Évalué à 2.

      Ah, merci pour le haskell notebook :-) ça ne semble pas cependant être un noyaux natif, mais c'est déjà un pas en avant :-)

      • [^] # Re: Haskell

        Posté par  . Évalué à 1. Dernière modification le 16 août 2013 à 22:09.

        Qu'est-ce qu'un noyau natif ? En quoi cela diffère de celui de Julia (qui est natif donc) ?
        (Je connais pas du tout ipython, mais ça à l'air cool)

        • [^] # Re: Haskell

          Posté par  . Évalué à 1. Dernière modification le 17 août 2013 à 07:55.

          Le noyau actuel (en Python) lance l’interpréteur standard (GHCI) et fait des entrées-sorties sur son processus. Un vrai noyau utiliserait directement l’API de GHC pour être un vrai interpréteur.

  • # ipython c est bon, notebook c est quoi?

    Posté par  . Évalué à 2.

    Utilisateur d'ipython depuis des annees, ca fait plaisir de voir que ca continue d'evoluer.
    J'apprecie beaucoups la simplification de l'api pour demarrer un shell de debug:

    from IPython import embed
    embed()

    ou

    import IPython
    IPython.start_ipython()

    Mais une question idiote , les notebooks pour un developeur ca sert a quoi? Ca a l'aire de surtout etre utilise par des profs pour faire des TP….

    • [^] # Re: ipython c est bon, notebook c est quoi?

      Posté par  (site web personnel) . Évalué à 2.

      Pour ma part, je me suis beaucoup servi des notebooks quand je faisais de l'analyse des résultats d'une simulation avec l'excellente bibliothèque Panda. Je m'en sers encore (mais moins souvent il est vrai), pour vérifier les résultats d'une formule de manière plus interactive que par la console.

      Je pense que ça que les notebooks sont vraiment puissants quand l'on souhaite faire de l'analyse interactive de données. En bonus, on obtient les résultats sous forme d'une page web qui l'on peut directement partager avec des collègues (avec le nbviewer).

      Cordialement,
      Tony

      • [^] # Re: ipython c est bon, notebook c est quoi?

        Posté par  . Évalué à 2.

        D'abord un gros big up pour les dev de ipython
        J'utilise le notebook pour mon développement, pour tester quelques lignes de codes avant de les inclure dans mes modules. Je trouve ça particulièrement utile pour la production de graphes (avec matplotlib)

        Ensuite, je teste en ce moment l'utilisation du notebook pour faire exécuter du code à des utilisateurs qui ne connaissent pas la programation (des biologistes). Pour moi c'est une alternative au dev d'une interface graphique, qui permet vraiment de faire du 'litterate programing', je peux expliciter le fonctionnement du code, et les utilisateurs peuvent modifier facilement les paramètres en éditant les cellules. C'est beaucoup plus rapide à mettre en place, plus flexible et moins ch***t à programmer ;-).

    • [^] # Re: ipython c est bon, notebook c est quoi?

      Posté par  . Évalué à 1.

      Il faut savoir qu'en écrivant un import hook pour les fichier ipynb, ceux-ci peuvent se comporter comme de vrais modules python.
      Ceci permet d'alterner les section de code et de documentation avec en bonus les math qui vont avec rendu an LaTeX.

      Bon il y a encore quelques limitation, une classe doit être écrite dans une seule cellule, ce qui limite la documentation de chaque méthode indépendamment, mais ça n devrais pas être trop dure à corriger. Il faut juste coder le import_hook un peu mieux :-)

  • # Hum

    Posté par  . Évalué à 5.

    J'utilise ipython depuis pas mal de temps, mais pour moi ça a toujours était un interpréteur python évolué, j'aurais donc 2 questions :

    • Qu'est ce que les notebook ?
    • Qu'est ce que les noyaux ?

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

    • [^] # Re: Hum

      Posté par  . Évalué à 4.

      Les notebooks se sont des pages web propulsées par un noyau IPython qui tourne en local ou à distance.

      • [^] # Re: Hum

        Posté par  . Évalué à 2.

        Le plus simple pour se donner une idée est de regarder un truc comme ça sur nbviewer

        En pratique le notebook c'est la même chose en interactif. On édite les zone de code, Shift+enter, et ca regenère le resultat juste en dessous.
        On peut aussi y éditer des zones de "non-code" (markdown) qui sont converties en HTML et donnent les zones de texte explicatif

        Le Noyal va juste être le processus qui interprète le code, et génère la sortie. Il peu être python ou pas l'interface reste le même.

        C'est un peu comme l'espace collaboratif de rédaction linuxfr, sauf qu'on peut dans certain paragraphe écrire plot(range(10)) , on on aura le code avec syntax highlighting et le graph dans la dépêche finale :-)

  • # pour faire quoi ?

    Posté par  . Évalué à 0.

    Quels sont les principaux usages pour lesquels ce logiciel a été créé ?

Suivre le flux des commentaires

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