Für meine Debugging-Bedürfnisse pdb
ist das ziemlich gut. Es wäre jedoch viel cooler (und hilfreicher), wenn ich darauf eingehen könnte ipython
. Ist das möglich?
81
Es gibt ein ipdb
Projekt, das iPython in die Standard-PDF-Datei einbettet. Sie können also einfach Folgendes tun:
import ipdb; ipdb.set_trace()
Es kann über das Übliche installiert werden pip install ipdb
.
ipdb
ist ziemlich kurz, sodass Sie anstelle von easy_installing auch ipdb.py
irgendwo auf Ihrem Python-Pfad eine Datei erstellen und Folgendes in die Datei einfügen können:
import sys
from IPython.Debugger import Pdb
from IPython.Shell import IPShell
from IPython import ipapi
shell = IPShell(argv=[''])
def set_trace():
ip = ipapi.get()
def_colors = ip.options.colors
Pdb(def_colors).set_trace(sys._getframe().f_back)
ModuleNotFoundError: No module named 'IPython.Debugger'
,ModuleNotFoundError: No module named 'IPython.Shell'
undImportError: cannot import name 'ipapi'
ModuleNotFoundError: No module named 'IPython.Debugger'
,ModuleNotFoundError: No module named 'IPython.Shell'
undImportError: cannot import name 'ipapi'
breakpoint()
Funktion auf ipdb zu übertragen.In IPython 0.11 können Sie IPython wie folgt direkt in Ihren Code einbetten
Ihr Programm könnte so aussehen
Dies passiert, wenn Sie es ausführen (ich habe es willkürlich ausgewählt, es in einer vorhandenen Ipython-Sitzung auszuführen. Das Verschachteln von Ipython-Sitzungen wie dieser kann meiner Erfahrung nach zum Absturz führen).
quelle
def f() : pass ; IPython.embed = f
so dass derembed()
Anruf ein Noop ist, dann Strg + DWenn Sie eine modernere Version von IPython (> 0.10.2) verwenden, können Sie so etwas wie verwenden
Aber es ist wahrscheinlich besser, nur ipdb zu verwenden
quelle
Das Äquivalent von
mit IPython ist so etwas wie:
Es ist ein bisschen ausführlich, aber gut zu wissen, wenn Sie keine ipdb installiert haben. Der
make_session
Anruf ist einmal erforderlich, um das Farbschema usw. einzurichten, undset_trace
Anrufe können überall dort getätigt werden, wo Sie eine Unterbrechung benötigen.quelle
Wenn ich ipython verwende, aktiviere ich normalerweise das automatische Debuggen mit dem darin enthaltenen Befehl "pdb".
Anschließend führe ich mein Skript mit dem Befehl "run myscript.py" in dem Verzeichnis aus, in dem sich mein Skript befindet.
Wenn ich eine Ausnahme erhalte, stoppt ipython das Programm im Debugger. Überprüfen Sie den Hilfebefehl für die magischen Ipython-Befehle (% magic).
quelle
Ich möchte diesen Einzeiler einfach in meine Skripte einfügen, wo ich einen Haltepunkt setzen möchte:
Neuere Version könnte verwenden:
quelle
Es sieht so aus, als ob Module in letzter Zeit ein bisschen gemischt wurden. Unter IPython 0.13.1 funktioniert Folgendes für mich
Leider ist in qtconsole alles ziemlich wertlos .
quelle
Neuere Versionen von IPython bieten einen einfachen Mechanismus zum Einbetten und Verschachteln von IPython-Sitzungen in beliebige Python-Programme. Sie können das folgende Rezept befolgen , um IPython-Sitzungen einzubetten:
Verwenden
ipshell()
Sie dann, wann immer Sie in eine IPython-Shell fallen möchten. Auf diese Weise können Sie IPython-Interpreter in Ihren Code einbetten (und sogar verschachteln).quelle
Aus den IPython-Dokumenten :
startet programmgesteuert eine IPython-Shell. Offensichtlich sind die Werte im
namespace
Diktat nur Dummy-Werte - es könnte sinnvoller sein, sie zu verwendenlocals()
in der Praxis zu verwenden.Beachten Sie, dass Sie dies fest codieren müssen. es wird nicht so funktionieren wie
pdb
es ist. Wenn Sie das möchten, entspricht die Antwort von DoxaLogos wahrscheinlich eher Ihrer Suche.quelle
Der schnelle und einfache Weg:
Dann schreib einfach
Überall dort, wo Sie mit dem Debuggen Ihres Programms beginnen möchten.
quelle
ImportError: No module named 'IPython.Debugger'
auf Python 3.4 / IPython 3Ich musste dies ein paar Mal googeln, wenn ich in den letzten Tagen eine Antwort hinzufügte ... manchmal ist es schön, ein Skript normal ausführen zu können und nur bei Fehlern in ipython / ipdb zu landen, ohne
ipdb.set_trace()
Haltepunkte in den Code einfügen zu müssen(zuerst
pip install ipython
undpip install ipdb
natürlich)quelle
ipython --pdb -- ./path/to/my/script --with-args here
Das ist ziemlich einfach:
ipython some_script.py --pdb
Es muss iPython installiert werden. Normalerweise funktioniert dies:
pip install ipython
Ich verwende ipython3 anstelle von ipython, daher weiß ich, dass es sich um eine neuere Version von Python handelt.
Dies ist einfach zu merken, da Sie nur iPython anstelle von Python verwenden und am Ende --pdb hinzufügen.
quelle
Um IPythons REPL mit Terminalfarben zu erhalten, musste ich Folgendes tun:
https://ipython.readthedocs.io/en/stable/api/generated/IPython.html#IPython.start_ipython
quelle