Wenn Sie ein Python-Paket entwickeln, ist es sehr bequem, die Option -m
zu verwenden, um Module innerhalb des Pakets als Skripte zum schnellen Testen auszuführen. Zum Beispiel für somepackage
mit dem Modul somemodule.py
darin, indem
aus dem Verzeichnis, in dem sich somepackage
befindet, wird somemodule.py
ausgeführt, als ob das Submodul __main__
wäre. Die Verwendung dieser Aufrufsyntax ist besonders wichtig, wenn das Paket explizite relative Importe wie beschrieben verwendet. hier .
Ebenso ist es auch praktisch, die Option -m
zu verwenden, um ein Skript wie in
Gibt es eine Möglichkeit, beides gleichzeitig zu tun? Das heißt, kann ich ein Modul aufrufen, als wäre es ein Skript und gleichzeitig in den Debugger starten? Ich weiß, dass ich in den Code selbst gehen und import pdb; pdb.set_trace()
einfügen kann, wo ich brechen möchte, aber ich versuche das zu vermeiden.
Hier ist eine weitere Option, die auch mit Befehlszeilenargumenten funktioniert.
Es ist im Allgemeinen eine gute Idee, die Logik Ihres Skripts in eine main
-Funktion zu packen. Sie können main
dann in eine optionale Liste von Argumenten aufnehmen, um sys.argv
zu überschreiben. Hier ist ein Beispiel namens argdemo.py
:
Dieses Modul kann wie gewohnt ausgeführt werden:
%Vor% Oder es kann mit pdb
ausgeführt werden, indem direkt main()
aufgerufen wird:
(Beachten Sie, dass cmd_line_args
eine String-Liste sein muss, genau wie argv
).
Als zusätzlichen Bonus können Sie, wenn Ihr Modul über die Funktion main
verfügt, auf dieselbe Weise Komponententests schreiben =)
Aufbauend auf @ Jeds Antwort habe ich dieses Modul erstellt:
%Vor% Platziere das Modul als mpdb.py
irgendwo in deinem Python-Pfad (das aktuelle Verzeichnis funktioniert), dann kannst du Folgendes aufrufen:
Es gibt Bemühungen läuft um das in Python selbst zu lösen. Mit Python 3.7 können Sie Folgendes tun:
%Vor%Und ich habe einen Backport für ältere Python-Versionen (2.7 +) zur Verfügung gestellt:
%Vor%