Sortie d’IPython en version 3.0

Posté par . Édité par palm123, BAud, Benoît Sibaud, Nicolas Casanova, Nÿco, Snark, Ytterbium, eggman et Jiehong. Modéré par NeoX. Licence CC by-sa
35
28
fév.
2015
Python

Pour ceux qui ne connaissent pas IPython, je vous propose de consulter les dépêches précédentes car, même si à l'origine il s'agissait uniquement d'une console évoluée pour Python, l'envergure des possibilités a bien changé.

Pour rappel : IPython est une console alternative principalement tournée vers l’exploration interactive des données. […] 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 ceux qui préfèrent une version des nouvelles fonctionnalités dans la langue de Shakespeare, je vous suggère de lire les notes de version en anglais. Je vais me contenter de faire une traduction libre dans la langue de Molière, ainsi que de digresser sur d'autres sujets voisins.

Merci à tous les contributeurs à cette dépêche qui ont corrigé toutes mes fautes, anglicismes et autre erreurs qui font saigner les yeux etc. Merci palm123, eggman, BAud, Jiehong, Nÿco, Snark, Ytterbium et Nicolas Casanova.

Sommaire

En quelques mots

Le lecteur de LinuxFr.org étant friand de temps libre et n'étant pas habitué au roman de plus de 150 caractères, à cause de la plateforme sociale de gazouillement, un résumé s'impose :

  • Presque un an de travail.
  • Beaucoup de changements sous le capot
  • Nouveau design de l'interface
  • Peu de nouvelles fonctionnalités dans le cœur, mais malgré tout :
    • sélecteur de noyau dans l'interface
    • complétion Latex vers Unicode
    • nouveaux formats de Notebook
    • terminal dans le navigateur
    • éditeur de texte
  • Nouveautés externes:
    • Multi-utilisateur
    • Au revoir IPython, on renomme une grande partie du projet.
    • NbGrader pour noter ses élèves
    • Intégration avec Google Drive
  • Essayez-le maintenant dans votre navigateur avec Python, R & Julia : try.jupyter.org

Récapitulatif

Pour cette version 3.0 de IPython, nous avons eu plus de 150 contributeurs et près de 6000 commits, sur une durée d’un peu moins d’un an. La prise en charge de langages autres que python s'est beaucoup améliorée et, en particulier, il est maintenant possible de changer de noyau à la volée sans redémarrer le serveur web et configurer un nouveau profil.

sélecteur de noyal

Éditeur de texte

Suite à une demande de plus en plus forte d'héberger ses serveurs dans les nuages, la possibilité d'éditer des fichiers texte a été incorporée. Grâce à CodeMirror vous pouvez maintenant directement éditer des fichier .py, .jl , .js et tout autre fichier texte à partir de votre navigateur. Cet éditeur gère même des modes d'édition Vim, Emacs et Sublime Text afin de faire plaisir à la majorité des barbus qui utiliseraient cette interface web.

Bien sûr cet éditeur ne vaut pas un bon vieux ed sur un VT100, mais dépanne quand même.

Terminal

Bien sûr comme tout (bon) codeur a besoin de son terminal, il est possible d'avoir un émulateur de terminal complètement écrit en JavaScript pour utiliser son gestionnaire de versions ou son installeur de paquet favoris. Alors c'est utilisable, mais faut pas compter sur les standards web pour prendre en compte les claviers non QWERTY. Ainsi on peut dire au revoir à tout caractère qui aurait besoin de recourir à la touche ALT or ALT-GR. Sur mon AZERTY donc, pas de pipe.

On remercie aussi les concepteurs de polices de caractères, en particulier le créateur de "Consolas", pour qui une police monospace n'est monospace que pour les caractères ASCII. Ce serait trop facile sinon. Ainsi une fonte en caractère gras—même monospace—, n'est pas la même fonte qu'en normal, ou italique, et n'a donc pas la même largeur. Les logiciels utilisant curses ou équivalent (type aptitude of midnight commander) sont donc partiellement cassés.

LaTeX

Petite addition, mais pas des moindres, pour les scientifiques. Il est possible de taper les caractères Unicode en utilisant la notation LaTeX si le noyau le permet. On doit cette amélioration aux développeurs de Julia principalement. F\vec<tab> vous donnera un joli vecteur F, ou \alpha<tab>\dot<tab> si vous préférez les dérivées de lettres grecques.

Completions LaTex Unicode

Le web étant, encore une fois, un monde merveilleux plein de licornes roses dansant sur des arc-en-ciels, un navigateur ayant pas mal de part de marché combine les signes diacritiques avec le caractère suivant au lieu du précédent, donc ce n'est pas toujours utilisable…

Format de Notebook

Le format de Notebook a été simplifié et uniformisé, ce qui devrait faciliter la manipulation et génération par des bibliothèques ou programmes tiers. Le format est aussi décrit par un schéma JSON, donc plus de surprise pour l'interopérabilité, le schéma sert de référence.

De même le protocole de communication ZMQ ou websocket devrait être plus cohérent et avoir moins de cas particuliers à traiter.

Une fois n'est pas coutume, les changements ont été rétroportés sur IPython version 2.4 qui sera donc capable de lire les Notebooks générés par son grand frère.

Design

Le design du Notebook a été plus travaillé que dans les précédentes versions. Adrienne Wan Tulok a même été engagée à temps partiel et s'est même essayée au jeu des Pull Request sur GitHub, ce qui n'a pas été un grand succès. Néanmoins nous sommes contents du travail de design effectué et recommencerons l'expérience.

Tout ça pour ça ?

Bon, finalement, en un an de travail, ça fait peu de choses visibles pour l'utilisateur final ! Elles sont où les nouvelles fonctionnalités ? Et bien, majoritairement elles sont au niveau des API et dans des projets externes.

IPython est maintenant capable de parler avec pas moins de 33 noyaux, et pas forcément des moins impressionnants. Nous avons en particulier eu la surprise de voir Facebook relâcher un noyau LuaJit. Il est aussi en particulier possible d'écrire un noyau basé sur Python en moins de 80 lignes. Ceci est en partie dû à l'amélioration et la simplification du protocole qui, à chaque version, devient un peu moins spécifique à Python.

Certains n'hésitent pas à écrire des noyaux bash, qui affichent des images, et font de l'analyse de donnée avec.

IPython est mort, longue vie à IPython

Le fait qu’IPython soit polyglotte est peut-être un bon côté, mais le projet tel qu'il est aujourd'hui commence à devenir une usine à gaz. Le terme Python dans le nom est aussi problématique pour la communication. Beaucoup de personnes se demandent pourquoi installer IPython si le but est d'écrire en Haskell ou en Perl ! Pour des raisons légales aussi : en effet IPython est trop proche de Python et la PSF (Python Software Foundation) serait dans le droit, et serait probablement même obligée, de demander de changer de nom dans le cas où une majorité du code ne serait pas en Python.

C'est pour cela qu'une grande partie du code de IPython va être renommé pour devenir Jupyter. Le programmeur attentif remarquera même que le terme et logo s'invitent déjà dans beaucoup d'endroits dans cette nouvelle version :

Jupyter Logo

Jupyter

Jupyter est donc l'endroit qui regroupe et accueille volontiers tout projet en rapport avec Jupyter/IPython, sans avoir de spécificité pour un langage en particulier. On retrouvera, ici, la majorité des nouvelles fonctionnalités.

JupyterHub

JupyterHub fait partie des premiers projets créés sous cette organisation et se charge d'établir des fonctionnalités multi-utilisateurs. Le public visé est plutôt la petite structure disposant d'une équipe informatique que l'utilisateur lambda.
Avec JupyterHub, vous pouvez vous connecter et avoir accès à vos Notebooks, sans exposer une centaine de ports au monde entier.

Tempnb

De JupyterHub s'est dérivé tempnb, qui est maintenant gracieusement hébergé par Rackspace.

Il s'agit d'un service qui déploie des serveurs temporaires sous Docker sur lequel vous pouvez vous amuser pendant quelques heures. Les conteneurs n'ont pas accès au réseau cependant, donc pas de spam ou de minage de bitcoin.

Durant les périodes de test, tmpnb était déployé sur des machines relativement puissantes allant jusqu'au demi-Teraoctet de mémoire vive, et plus de stockage SSD que je ne pensais pouvoir voir dans un serveur physique.

Vous pouvez aller vous amuser à l'adresse suivante : try.jupyter.org. Il y a Python, Julia et R, plus quelques bibliothèques d'installées. Si vous voulez aidez un peu l'open source, envoyer un Tweet de remerciement à @jessenoller,@rgbkrk,@smashwilson and @rackspace, cela les aidera à convaincre les dirigeants de donner plus de ressources à l'open source (cliquez ici pour un tweet pré-remplis). N'hésitez pas non plus à contacter Rackspace developpeur si vous avez un projet open source qui a besoin de machines !

NbGrader

Bien que ce ne soit pas le but principal des Notebooks, ceux-ci sont semblerait-il de plus en plus utilisés dans l'enseignement. On trouve en particulier de plus en plus de cours en ligne qui utilisent des Notebooks. Jess Hamrick et Brian Granger ont pris l'initiative de faire leur enseignement en utilisant les Notebooks et d'auto-noter à l'aide de NbGrader. L'enseignant crée les Notebooks avec énoncés, solutions, et points assignés à chaque question. Chaque Notebook peut alors être exporté en version étudiants, qui les complètent et les renvoient. À l'aide de tests unitaires les points sont assignés à l'élève. Quant aux questions ouvertes, un export vers Google Forms permet au correcteur de noter tout en gardant l'anonymat de l'étudiant, puis d'exporter un fichier de notes vers une base de données. Lors de la soumission, les élèves peuvent aussi être prévenus des questions auxquelles ils ne peuvent avoir tous les points.

Ceci permet de fortement diminuer la charge de travail du correcteur, qui du coup peut passer plus de temps avec chaque étudiant. Il est aussi envisagé d'intégrer ceci avec une plateforme d'aide en ligne qui permettrait à l'étudiant de directement poster un lien vers la question problématique au lieu de copier/coller des morceaux de code.

L'utilisation de ce système est en test à l'Université de Berkeley, et à L'Université Polytechnique de l'État de Californie. La combinaison JupyterHub, Nbgrader, IPython 3 avec Authentification intégrée avec GitHub est utilisée pour la distribution des sujets aux élèves, ainsi que la soumission de leurs solutions. Le tout étant hébergé pendant la période de test chez Rackspace.

Jupyter drive

Le web étant de plus en plus collaboratif, la demande de pouvoir partager et travailler à plusieurs sur un Notebook est croissante.

Ceux qui ont suivi l'actualité Python ont probablement vu l'annonce de Google qui a créé coLaboratory : une version du Notebook basée sur Google Drive avec collaboration en temps réel. Google étant Google, l'avenir du projet était plus qu'incertain. Qui plus est, il s'agissait d'une ré-implémentation complète de l'interface, difficile à maintenir sur le long terme.

L'idée est donc venue d'intégrer les fonctionnalité de coLaboratory directement dans IPython sous forme d'extensions, de manière propre et maintenable.

C'est ce qu'est Jupyter Drive. L'extension ne prend pas encore en compte, pour l'instant, les commentaires et la synchronisation en temps réel, mais permet déjà d'accéder à ses fichiers sur Google drive.

Pour ma part je suis maintenant à l'Université de Berkeley grâce à une généreuse donation de Google à cette même université. Je vais travailler jusqu'en novembre prochain sur l'intégration de l'API "real-time" de Google au sein de Jupyter Drive et, si le temps le permet, fournir une alternative open-source du côté serveur.

Divers

O'reilly

Suite à une discussion avec des développeurs de la plateforme d'édition Atlas d'O'reilly,
on a eu le plaisir de voir un prototype qui utilisait l'architecture de Jupyter pour rendre les exemple de codes de leurs ouvrages exécutable. Si le projet est continué en interne, la possibilité d'exécuter le code ne serait-elle donnée qu'aux auteurs, ou O'Reilly fera-t-il des e-books interactifs, le futur nous le dira.

La Pomme

Le nouveau terrain de jeux du nouveau langage de la Pomme (Apple Swift Playground) ressemble de plus en plus au Notebook d'après les descriptions de leur blog. Bonne ou mauvaise chose, je ne sais pas.

Applications natives

Certains doctorants allemands ont du temps à perdre, et ont fait des applications OSX "native", sous le nom Kronos Notebook qui empaquette le Notebook avec le noyau python, ou le noyau haskell. Je n'ai pas testé mais l'utilisation de NWJS (ex node-webkit) devrait permettre de s'abstraire un peu plus des limitations imposées par les navigateurs (peu de raccourcis claviers, et d'accès aux ressources locales).

Le mot de la fin ?

Durant les semaines qui suivront la publication de IPython 3.0, le dépôt va être découpé en un grand nombre de plus petits projets.

Ceci devrait permettre un cycle de publication de chaque projet bien plus rapide et, on l'espère, favoriser les contributions. Chaque projet étant bien plus petit, il sera aussi beaucoup plus facile d'avoir une influence sur la direction prise et, qui sait, de se voir donner les droits de commit sur le dépôt principal.

Renommer une partie du projet permet aussi de montrer que Python n'est pas le seul langage. Avec une trentaine de langages compatibles, on espère voir participer des internautes de tous horizons, capables d'apporter un point de vue programmation fonctionnelle, ou bien structure de données immutable. On serait aussi heureux de savoir si les utilisateurs désireraient une interface traduite.

Merci donc à tous les utilisateurs, contributeurs, et lecteurs, ce fût un plaisir, tout du moins pour moi, de travailler sur ce projet, et j'espère que ça continuera ainsi longtemps.

  • # Logo down ?

    Posté par . Évalué à 3.

    Je pensais que img.linuxfr.org mettrait les images en cache, mais le lien du logo est cassé apparemment.

    Voilà un lien alternatif:

    https://raw.githubusercontent.com/ipython/ipython/master/IPython/html/static/base/images/logo.png

  • # Ça bouge !

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

    On peut dire que ça a sacrément bougé !!!

    Le hub est une très bonne nouvelle.

    Les avantages pour l'enseignement sont indéniables.

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

  • # Une autre manière de consommer des notebooks iPython

    Posté par . Évalué à 4.

    Hello,

    Pour ceux qui veulent expérimenter les notebooks sans rentrer dans les détails techniques, il existe aussi un Charm pour Juju.
    Il déploie la toute dernière version de iPython, un peu à la manière de la version Docker, à la différence tout de même qu'il peut rester permanent, dans des containers sur le laptop ou bien sur un cloud public.

    N'hésitez pas si vous avez des requêtes de fonctionnalités ou d'intégration. Notamment, je voulais intégrer une connectivité simple avec les outils Big Data (Spark, Hadoop, Cassandra…) qui se prêtent bien à l'utilisation avec les notebooks et iPython en général. Si vous avez des idées de features / options à rajouter, les feature requests peuvent se faire sur le GitHub du projet.

  • # questions sur le futur d'ipython

    Posté par . Évalué à 3.

    content de voir le projet progresser, j'avais quelques questions.

    • cette dépêche se focalise sur le notebook cela veut-il dire que peu de développements se sont fait sur la console texte ou qt ? quand je regarde ptpython/ptipython par exemple cela montre qu'il y a encore des améliorations possibles.

    • Ipython renommé jupyter devient finalement un éditeur web écrit en javascript du coup il va y avoir une scission des équipes de dev en python/javascript ?

    • \gamma\dot donne le même résultat buggé sur chromium et firefox , ça doit venir de Linux alors :)

    • Cette version est compatible avec pyqt5 ? j'ai vu des modifications pour cela dans inputhook.py mais sans plus.

    • je voulais me servir des notebook pour rédiger des rapports de résultats, du coup je vois avec intérêt l'arrivée d'une option "--output Executed" pour nbconvert , mais comment réaliser cela a partir d'un shell python?

    • Y-a-t-il une doc de la librairie IPython en javascript ?

    • impossible d'executer 2 fois IPython.display.Markdown() dans une même cellule , dommage vu qu'il n'est pas possible de fusionner plusieurs cellules pour créer un slide, j'avais espéré m'en servir comme alternative.

    je m’arrête la, je tiens a remercier les dev pour ce super outil et pour le développement rapide (et de qualité ) auquel ils nous ont habitué.

    bonne chance a Berkeley, le campus est vraiment sympa.

    • [^] # Re: questions sur le futur d'ipython

      Posté par . Évalué à 5.

      Pour la console qt, non, pas d'amélioration. Le ratio Code/Benefice est trop faible.
      C'est plus ou moins en abandonware. On accepte les pull requests.
      Le but serai d'utiliser une chose du genre Node-Webkit afin de réutiliser les pièces du notebook,
      et avoir mathjax, codemirror…etc réutilisable. L'utilisation d'un QtRichTextEdit pour le widget principal est à peux près de l'ordre d'utiliser un tourne vis crusiforme pour enlever une visse pentalobe.

      Pour la scission des repo/équipe, on est 4-5 à coder, (Moi, Min, Thomas, de Berkeley, dans la même pièce), je pense que spliter l'équipe vas être dure. Jon est supervisé par Brian (Cal Poly), je doute qu'il se séparent aussi.
      Jason et Sylvain qui sont chez Bloomberg et ne travaillent déjà que sur les widgets. Aucun pouvoir sur eux. Kyle bosse pour Rackspace et à pour le moment carte blanche, mais fait majoritairement du déploiement. On est donc déjà pas mal éparpiller, si on sépare plus ça fera moins d'une personne par repo :-)

      Sinon, non, ce n'est pas "que un éditeur en javascript". Il y a toute la partie serveur python qui n'est pas petite.
      La séparation va majoritairement permettre d'avoir un cycle de dev plus cours pour certaines sous partie du projet,
      et on l'espère de les rendre plus accessible.

      \gamma\dot … en effet. a\dotmarche, mais a\vec b (vector sur b au lieu de a) non. ça semble dépendre du caractère…

      PyQt5, je vit sur master, donc j'ai du mal à distinguer les nouveautées… la compat PyQt5 me dit vaguement qqch.

      --execute est une bonne question pour la ML ou un post de blog. ce n'est pas trop dure, mais long.
      Tout est prevu pour functionner an API, mais faut créer les bons objects. cf ici

      Doc javascript: Oui, et non. Le js n'est pratiquement pas stable. On cherche encore un bonne lib pour documenter.
      tu peux utiliser un coup de yui-doc dans le don dossier. Ou un make jsapi dans /doc.

      impossible d'executer 2 fois IPython.display.Markdown(), c'est une erreur de compréhension de ce qu'est Markdown(). Ça créer un object markdown, mais ne l'affiche pas[1]. Tout comme 1;1 n'affiche pas 2 fois 1 dans la ligne de commande, il faut utiliser print(1);print(1). Tu peux faire le parallel print IPython.display.Markdown()<->1, IPython.display.display <-> print.

      [1] à moins que l'object soit le dernier statement de la cellule auquel cas celui)ci engendre un effet de bord.
      La difference est que dans ce cas, le Out[x] apparait.

      Le terme "slide" fait t'il référence à une présentation avec le slideshow mode ? Je ne suis pas sur de ce que tu essaye de faire.

      • [^] # Re: questions sur le futur d'ipython

        Posté par . Évalué à 1.

        merci pour ces réponses détaillées , je suis allé un peu vite dans ma dernière question.

        en fait je parlais d’exécuter ça

        IPython.display.Markdown('#titre1')
        a=linspace(0,pi,1000)
        plot(a,sin(a))
        IPython.display.Markdown('#titre2')

        seul le deuxième markdown est exécuté, mon objectif étant de mixer du code python et du markdown dans un même slide ( pour un slideshow ) sans utiliser les fragments.

        Je n'ai pas trouvé de réponse pour l'instant.

        3 autres points

        • je n'ai pas par défaut de de kernel bash pour le notebook bien qu’étant sous linux

        • qt5 a l'air de fonctionner , avec la dernière version de matplotlib contrairement a 2.4.1

        In [1]: %pylab
        Using matplotlib backend: Qt5Agg
        • Pour le slideshow y-a-t-il moyen de modifier le css pour basculer sur le dark-theme de reveal , avec l'option "--template" peut-être ?
        • [^] # Re: questions sur le futur d'ipython

          Posté par . Évalué à 1.

          Même réponse, IPython.display.Markdown('#titre1') n'est pas fait pour afficher du Markdown:

          %matplotlib inline
          import matplotlib.pyplot as plt
          from IPython.display import Markdown, display
          from numpy import linspace, pi, sin 
          
          # note that order does not matter
          m2 = Markdown('# Titre2') # does not display markdown 
          m1 = Markdown('# Titre1') # create a MD object. 
          
          
          a=linspace(0,pi,1000)
          fig, ax = plt.subplots()
          ax.plot(a,sin(a))
          
          # here though order matters. 
          display(m1)
          display(fig)
          display(m2)
          plt.close(fig)
          
          Markdown('### M last')# **last** statement becomes displayed [1] and assigned to _ (underscore)
                                # will appear after the "Out[]:"

          [1] Le dernier statement n'est pas vraiment afficher dans le même sens que les display(), vu que c'est un résultat qui est retourné par le noyaux, mais en première approximation c'est pareil.

          Les figues de matplotlib sont un cas particulier traité par IPython, et nécéssitent in close() pour ne pas s'afficher 2 fois.

  • # Et python dans tout ça ?

    Posté par . Évalué à 2.

    Est-ce que ce dernier reste le langage utilisé pour le coeur du projet ?
    Merci.

  • # Merci

    Posté par . Évalué à 1.

    Pour votre super boulot!

Suivre le flux des commentaires

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