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 Leprojet 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 actionTest du dĂ©bogueur sur le site du projet Binder
Le projet de classeur Vous pouvezessayer 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
Shell
qui 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 ( stdout
et stderr
). - Un canal
Control
similaire Ă un canal Shell
mais 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 Control
a dĂ©jĂ Ă©tĂ© utilisĂ© pour les requĂȘtes Interrupt
et 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
Control
dans 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 Vouspouvez dĂ©boguer le code situĂ© dans les consoles et dans les fichiers.DĂ©bogage de code Ă partir de la console dans JupyterLabDĂ©bogage dans JupyterLab le code dans le fichier LedĂ©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 tempsLes variables peuvent ĂȘtre affichĂ©es Ă l'aide d'une arborescence ou d'une table.Outils d'exploration des variablesL'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?