Debugging für externe .py-Funktionen vom Jupyter / IPython-Notebook aus

8

Mein Jupyter / IPython-Notizbuch führt Funktionen in einem externen .py aus.

Ich muss Haltepunkte innerhalb dieser Funktionen setzen, Variablen prüfen, Einzelschritt, usw.

Es ist einfach nicht sinnvoll, eine Kombination von print -Anweisungen zu verwenden und Ausnahmen auszulösen, um eine Zelle vorzeitig zu verlassen.

Ich brauche einen Workflow.

Ist es möglich, einen Editor / eine IDE von Drittanbietern anzuschließen, um die .py-Datei anzuzeigen und sie irgendwie mit der Python-Laufzeitumgebung zu verbinden, die Jupyter / IPython verwendet?

Wenn ich also einen Breakpoint in meinem externen .py unter Verwendung meiner IDE setze und eine Zelle in dem Notizbuch ausführe, die den Breakpoint trifft, kann ich weiterhin manuell innerhalb der IDE navigieren.

BEARBEITEN: Ich habe Ссылка Ссылка

BEARBEITEN Ссылка & lt; - dieses Video nähert sich dem, wonach ich suche, ich kann es einfach Ich verstehe nicht, wie man alles zusammenstellt. Dieses Video zeigt Spyder, der eine IDE mit einer IPython-Eingabeaufforderung ist ... Ich frage mich, ob ich vielleicht mein Notebook durch die Eingabeaufforderung laufen lassen und es debuggen kann.

EDIT: Es sieht so aus, als ob PyCharm genau das tut, wonach ich suche: Ссылка

EDIT: Ich bin gerade dabei, PyCharm dazu zu bringen, sich zu benehmen. Ich werde die Details in einer Antwort zur Verfügung stellen, wenn ich es sortiere.

    
P i 13.09.2016, 08:44
quelle

3 Antworten

5
  

Ist es möglich, einen Editor / IDE von Drittanbietern anzuschließen, um die .py-Datei anzuzeigen?   und verbinden Sie es irgendwie mit der Python-Laufzeit, die Jupyter / IPython benutzt?

Ja, ist möglich .

Verwenden Sie Emacs als Ihre Python-IDE von Drittanbietern.

Sie können eine Datei Seite an Seite mit der iPython-Laufzeitumgebung öffnen. Es ist möglich, Definitionen aus der externen Datei mithilfe von Tastenkürzeln direkt an die Eingabeaufforderung zu senden und Haltepunkte, Einzelschritt und Inspect-Variablen mithilfe des Standard-Python-Debuggers pdb aus der iPython-Eingabeaufforderung auszuwählen.

Auto-Vervollständigung funktioniert gut. Durch einfaches Schreiben von import XXX wird Emacs auf alle Funktionen im Modul XXX aufmerksam gemacht.

Hier ist ein Beispiel Screenshot:

Und dies sind die Schritte, die ich unternommen habe, um zum Screenshot zu gelangen. *

  1. Öffnen Sie die Datei playground.py auf Emacs.
  2. Drücken Sie C-c C-p , um einen iPython-Prozess zu starten und eine Datei mit ihm zu verbinden . Beachten Sie, dass der iPython-Prozess voll funktionsfähig ist. Ich kann alle magischen Methoden darauf anwenden.
  3. Drücken Sie M-m m d b auf Fügen Sie den Haltepunkt in die gewünschte Zeile ein (in Form eines pdb-Imports)
  4. Drücken Sie C-M-x , um die Definition an die iPython-Eingabeaufforderung zu senden . Beachten Sie im Screenshot, dass ich unique_everseen anrufe, ohne es jemals in die Eingabeaufforderung eingegeben zu haben. Die Definition wurde direkt aus der Datei gesendet (deshalb haben wir eine leere Zelle 2 , als visuelle Rückmeldung, dass Emacs hat etwas getan.)
  5. Führe die Funktion in der iPython-Eingabeaufforderung aus, um den Haltepunkt auszulösen. Ich bekomme Informationen, die mir sagen, welche Zeile ich bin und trete automatisch in den Debugger ein.
  6. Ich kontrolliere Variablen , um zu sehen, was passiert.
  7. Ich drücke n auf gehe zur nächsten Anweisung.
  8. Ich klicke auf den Dateinamen (rot in der Eingabeaufforderung angezeigt) und es führt meinen Cursor direkt zu dieser Zeile innerhalb der playground.py Datei. Beachten Sie die schwarzen Dreiecke neben den Zeilennummern, die mir sagen, wo der Stepper ist. Ziemlich nett.

Nun, Ich habe noch nicht einmal an der Oberfläche gekratzt, was Emacs bieten kann. Wenn dich das interessiert, würde ich vorschlagen, es zu untersuchen. Es ist wirklich mächtig und hat eine großartige, sehr hilfreiche und aktive Community.

Um die Python-Konfiguration sofort zu starten, ohne etwas selbst konfigurieren zu müssen, installieren Sie einfach Spacemacs , eine beliebte Emacs-Distribution (Anaconda ist für Python, Spacemacs für Emacs). Die Installationsanleitung finden Sie unter dem Link.

Verwenden von Emacs zum Bearbeiten von iPython-Notizbüchern.

Ein Paket namens EIN (Emacs iPython Notebooks) "bietet einen IPython Notebook-Client und integrierte REPL in Emacs." Damit es funktioniert, öffnen Sie Ihren iPython-Notebook-Server von jedem Terminal mit ipython notebook und rufen Sie die Funktion ein:notebooklist auf.

Weitere Informationen finden Sie auf der Projektseite hier und auf der Spacemacs iPython-Notebook-Layerseite hier .

Insbesondere aus der EIN-Dokumentation:

  1. Kopieren / Einfügen von Zellen, sogar von / zu verschiedenen Notebooks.
  2. Konsolenintegration: Sie können sich einfach über die Konsolenanwendung mit einem Kernel verbinden. Dadurch können Sie das Debuggen im selben Kernel starten. Es ist sogar möglich, über ssh eine Verbindung zu einer Konsole herzustellen.
  3. Ein IPython-Kernel kann mit einem beliebigen Emacs-Puffer "verbunden" werden. Auf diese Weise können Sie einen Puffer- oder Pufferbereich mit demselben Kernel wie das Notebook auswerten. Notebook-Extras wie Tooltip-Hilfe, Hilfe-Browser und Code-Vervollständigung sind in diesen Puffern verfügbar.
  4. Springe zur Definition (gehe zur Definition, indem du M-. über ein Objekt drückst).

Alle für den einfachen iPython + Datei-Workflow beschriebenen Funktionen sind für iPython-Notizbücher (* .ipynb) verfügbar.

Screenshots hier.

    
dangom 18.09.2016 20:35
quelle
3

In Jupyter können Sie den Python-Debugger verwenden, indem Sie unter zwei Zeilen einen Haltepunkt hinzufügen.

%Vor%

Die Codeausführung wird bei diesem Schritt angehalten und Sie erhalten ein Textfeld zum Debuggen von Python-Code. Ich habe einen Screenshot für dasselbe beigefügt.

Sie können sich auf die Dokumentation von pdb beziehen, um die Vorgänge auszuführen, die Sie mit Ausnahme des Druckvorgangs durchführen können Ihre Variablen

    
Vinod 20.09.2016 12:39
quelle
0

Wir haben gerade die erste Version eines Python Visual Debuggers für Jupyter Notebooks veröffentlicht, die von Interesse sein könnte. Sie finden die Details hier .
(Disclaimer: Ich bin der leitende Entwickler)

    
David Taieb 15.03.2018 03:15
quelle