DĂ©bogueur visuel pour Jupyter

L'avancement de la plupart des projets logiciels est basé sur de petits changements qui, avant de continuer, sont soigneusement évalués. Les résultats rapides de l'exécution du code et la grande vitesse de développement itératif sont quelques-unes des principales raisons du succÚs de Jupyter. Surtout dans le domaine de la recherche scientifique.

Les utilisateurs de Jupyter adorent expérimenter avec les ordinateurs portables; ils utilisent les ordinateurs portables comme moyen de communication interactif. Cependant, si nous parlons des tùches de développement de logiciels classiques, par exemple, la refactorisation d'une grande base de code, alors nous pouvons dire que pour résoudre de tels problÚmes, Jupyter est souvent remplacé par des IDE normaux.


L'environnement JupyterLab Le

projet Jupyter travaille depuis plusieurs années pour combler l'écart entre les notebooks et les IDE classiques. Ces efforts sont largement représentés par la plate-forme JupyterLab, qui offre au développeur une interface plus avancée et plus pratique, qui comprend un gestionnaire de fichiers, des éditeurs de texte, des consoles, des blocs-notes.

Certes, jusqu'à récemment, quelque chose manquait dans JupyterLab. Il s'agit de la principale raison pour laquelle les utilisateurs ont été contraints de passer à d'autres environnements. Les utilisateurs de Jupyter n'avaient pas de débogueur visuel. Les utilisateurs, en particulier ceux qui sont habitués aux IDE classiques, demandent depuis longtemps cette fonctionnalité.

DĂ©bogueur pour Jupyter


Aujourd'hui, aprÚs plusieurs mois de développement, nous sommes heureux de présenter la premiÚre version publique du débogueur visuel pour Jupyter!

Ce n'est que la premiĂšre version, mais le dĂ©bogueur vous permet dĂ©jĂ  de dĂ©finir des points d'arrĂȘt dans les cellules du bloc-notes et dans les fichiers source. Il vous permet d'examiner le contenu des variables, de visualiser la pile d'appels. Et ses capacitĂ©s ne se limitent pas Ă  cela.


Jupyter Visual Debugger en action

Test du débogueur sur le site du projet Binder



Le projet de classeur Vous pouvez

essayer un nouveau débogueur dans le cas sur le site Web du projet de classeur. Voici un bloc-notes de démonstration avec lequel vous pouvez expérimenter.

Installation


Le frontend du dĂ©bogueur peut ĂȘtre installĂ© en tant qu'extension JupyterLab:

jupyter labextension install @jupyterlab/debugger

Dans les versions futures, le frontend du débogueur sera inclus dans JupyterLab par défaut.

Sur le backend, pour que le débogueur fonctionne, il doit y avoir un noyau dans lequel le protocole de débogage Jupyter est implémenté (nous en parlerons plus loin ci-dessous). Jusqu'à présent, le seul noyau qui implémente ce protocole est xeus-python . C'est le noyau Jupyter du langage de programmation Python. (Les plans de développement du projet incluent également la prise en charge du protocole de débogage dans ipykernel.)

Vous pouvez installer le noyau xeus-python comme ceci:

conda install xeus-python -c conda-forge

AprĂšs l'installation de xeus-python et de l'extension du dĂ©bogueur, tout devrait ĂȘtre prĂȘt Ă  fonctionner avec le dĂ©bogueur visuel Jupyter.

Faites attention au fait qu'il existe également des «roues» PyPI pour xeus-python, mais elles ne sont pas encore expérimentales et leur disponibilité dépend de la plateforme.

Détails du protocole de débogage Jupyter


▍Nouveaux types de messages pour les canaux Control et IOPub


Les noyaux Jupyter (la partie de l'infrastructure qui exécute le code utilisateur) communiquent avec d'autres parties du systÚme en utilisant un protocole de communication interprocessus bien développé .

Il existe plusieurs canaux de communication:

  • Un canal Shellqui fonctionne selon le schĂ©ma de demande / rĂ©ponse et est utilisĂ©, par exemple, pour les demandes d'exĂ©cution de code.
  • Un canal IOPub, qui est un canal de communication unidirectionnel qui va du cƓur au client. Il est utilisĂ©, par exemple, pour rediriger les flux de sortie standard ( stdoutet stderr).
  • Un canal Controlsimilaire Ă  un canal Shellmais fonctionnant sur une prise diffĂ©rente. Pour cette raison, ses messages ne sont pas mis en file d'attente avec les demandes d'exĂ©cution de code et ont une prioritĂ© plus Ă©levĂ©e. Le canal Controla dĂ©jĂ  Ă©tĂ© utilisĂ© pour les requĂȘtes Interruptet Shutdown. Nous avons dĂ©cidĂ© de l'utiliser pour les commandes envoyĂ©es au dĂ©bogueur.

Deux nouveaux types de messages ont été ajoutés au protocole:


▍ Debug Adapter Protocol


Le principe clé de l'architecture Jupyter est le manque de liaison à un certain langage de programmation. Par conséquent, il est important que le protocole de débogage prenne en charge l'adaptation à diverses implémentations du noyau.

Un standard de débogage populaire est le Debug Adapter Protocol (DAP), développé par Microsoft. Il s'agit d'un protocole basé sur JSON qui, par exemple, sous-tend le sous-systÚme de débogage de Visual Studio Code. Ce protocole prend en charge de nombreux backends conçus pour différentes langues.

En conséquence, il était tout à fait naturel pour nous d'utiliser des messages DAP via des messages récemment ajoutés debug_[request/reply]et debug_event.

Cependant, dans le cas de Jupyter, ce n'Ă©tait pas tout Ă  fait suffisant:

  • , , , Jupyter ( , , ). debug_request.
  • , , Jupyter, , , , , , .

Le contenu des requĂȘtes adressĂ©es au dĂ©bogueur et ses rĂ©ponses, en plus de ces deux diffĂ©rences, correspond Ă  DAP.

Toutes ces extensions du protocole du noyau Jupyter ont Ă©tĂ© proposĂ©es comme candidats Ă  l'inclusion dans la spĂ©cification officielle. Une proposition de dĂ©veloppement Jupyter connexe (JEPyter Enhancement Proposal, JEP) peut ĂȘtre trouvĂ©e ici .

Xeus-python est le premier noyau Jupyter à prendre en charge le débogage


Xeus est une implĂ©mentation C ++ du protocole du noyau Jupyter. Ce n'est pas en soi le cƓur. Il s'agit d'une bibliothĂšque qui aide Ă  dĂ©velopper des noyaux. Cette bibliothĂšque est utile pour dĂ©velopper des noyaux pour les langages qui ont une API C ou C ++ (comme Python, Lua ou SQL). Elle prend en charge les tĂąches fastidieuses de mise en Ɠuvre du protocole de messagerie Jupyter. Cela permet Ă  l'auteur du noyau de se concentrer sur les tĂąches liĂ©es Ă  l'interprĂ©tation des constructions de langage: sur l'exĂ©cution du code, sur son analyse, etc.

Plusieurs cƓurs ont Ă©tĂ© dĂ©veloppĂ©s Ă  l'aide de xeus, y compris le populaire noyau xeus-cling pour C ++, basĂ© sur l'interprĂ©teur cling C ++ crĂ©Ă© au CERN. Le noyau xeus-python est une alternative ipykernel basĂ©e sur xeus. Icides informations sur la premiĂšre version du noyau xeus-python.

Le noyau xeus-python convient à la premiÚre implémentation du protocole de débogage pour plusieurs raisons:

  • Il prend en charge l'exĂ©cution de code compĂ©titif, ce qui vous permet d'effectuer un travail avec le canal Controldans un thread sĂ©parĂ©.
  • Il dispose d'une base de code compacte. GrĂące Ă  cela, ce noyau est un bon "bac Ă  sable" dans lequel il est pratique d'implĂ©menter quelque chose de nouveau. L'implĂ©mentation de la premiĂšre version du protocole de dĂ©bogage dans ipykernel nĂ©cessiterait une refactorisation plus sĂ©rieuse et plus d'efforts pour coordonner les changements dans les premiers stades de dĂ©veloppement.

Plan Plan de développement du noyau Xeus-python


Les objectifs de développement à court terme de xeus-python sont les suivants:

  • Ajout de la prise en charge des fonctionnalitĂ©s IPython. Maintenant, par rapport Ă  ipykernel, c'est la principale caractĂ©ristique manquante de xeus-python.
  • AmĂ©lioration des "roues" PyPI- de xeus-python.

▍À propos des autres cƓurs


Ce qui a dĂ©jĂ  Ă©tĂ© fait en termes de prise en charge du dĂ©bogage dans le frontend peut ĂȘtre utilisĂ© avec tous les noyaux qui implĂ©mentent le protocole de noyau Ă©tendu.

Cette annĂ©e, nous travaillerons pour fournir un support de dĂ©bogage dans autant de cƓurs que possible.

La prise en charge du débogage arrive bientÎt pour d'autres noyaux basés sur xeus qui ont beaucoup en commun avec le noyau xeus-python. Par exemple, pour tel que xeus-cling.

Détails de l'architecture frontale du débogueur


L'extension du débogueur pour JupyterLab offre aux utilisateurs les mécanismes généralement attendus de l'IDE:

  • Barre latĂ©rale avec des fenĂȘtres qui implĂ©mentent les fonctionnalitĂ©s suivantes: surveillance des variables, affichage des points d'arrĂȘt, affichage du code, analyse des piles d'appels.
  • La possibilitĂ© de dĂ©finir des points d'arrĂȘt directement dans le code, en particulier dans le code situĂ© dans les cellules du bloc-notes et dans les consoles.
  • Marqueurs visuels indiquant la position Ă  laquelle l'exĂ©cution du code s'est arrĂȘtĂ©e.

Lorsque vous travaillez avec des blocs-notes Jupyter, les informations sur l'Ă©tat de l'exĂ©cution du code sont stockĂ©es dans le noyau. Mais le code de cellule peut ĂȘtre exĂ©cutĂ©, aprĂšs quoi cette cellule peut ĂȘtre supprimĂ©e du bloc-notes. Que doit-il se passer si l'utilisateur, lors du dĂ©bogage, souhaite saisir un bloc de code distant?

L'extension prend en charge ce scénario spécifique et est capable d'afficher le code d'une cellule précédemment exécutée en mode lecture seule.


Passer au code situé dans la cellule distante Vous

pouvez déboguer le code situé dans les consoles et dans les fichiers.


DĂ©bogage de code Ă  partir de la console dans JupyterLab


DĂ©bogage dans JupyterLab le code dans le fichier Le

dĂ©bogage peut ĂȘtre activĂ© au niveau du bloc-notes, ce qui permettra aux utilisateurs de dĂ©boguer le bloc-notes et, en mĂȘme temps, de travailler avec un autre bloc-notes.


DĂ©bogage de plusieurs blocs-notes en mĂȘme temps

Les variables peuvent ĂȘtre affichĂ©es Ă  l'aide d'une arborescence ou d'une table.


Outils d'exploration des variables

L'extension du débogueur pour JupyterLab a été conçue pour fonctionner avec tout noyau prenant en charge le débogage.

Du fait que l'extension s'appuie sur le protocole DAP, elle résume les fonctionnalités de différentes langues et offre à l'utilisateur une interface de débogage cohérente.

Le diagramme suivant montre le flux de messages envoyés lors d'une session de débogage entre l'utilisateur, l'extension JupyterLab et le noyau.


Utilisation du protocole de l'adaptateur de débogage dans un débogueur ( source )

Plans futurs


En 2020, nous prĂ©voyons d'amĂ©liorer sĂ©rieusement le dĂ©bogueur. À savoir, nous parlons de ce qui suit:

  • Prise en charge de la sortie de diffĂ©rents types MIME dans la fenĂȘtre de l'explorateur de variables.
  • Prise en charge de l'utilisation de points d'arrĂȘt conditionnels dans l'interface du dĂ©bogueur.
  • AmĂ©lioration de la convivialitĂ© de l'interface du dĂ©bogueur.
  • ImplĂ©menter la possibilitĂ© de dĂ©boguer les applications VoilĂ  Ă  partir de l'extension @jupyter-voila/jupyterlab-preview.

Chers lecteurs! Avez-vous essayé le débogueur visuel Jupyter?


All Articles