Python VSCode Debug¶
Beim Entwickeln von Code - hier Python - stellt sich auch schnell die Frage nach dem Debugging.
Python VSCode Debug by C. Lempa - eine Grundidee¶
Wenn unser Python Code in einem Container läuft - wie stellen wir dann das Debugging bereit.
Vorschlag: Visual Studio Code mit den passenden Extensions.
Tutorial: Christian Lempa - Docker VSCode Python Tutorial // Run your App in a Container
Tipp
In VSCode kann man Profile anlegen mit denen man eine komplett eigene Umgebung (Einstellungen, Shortcuts, Snippets, Tasks und Extensions) erstellen kann. Das ist in der Praxis sehr hilfreich und beim Testen eine sehr gute Hilfe.
Extensions installieren:
Docker (;-)
über F1 wähle Add Docker Files to Workspace und beantworte die Fragen.
Es werden folgende Dateien erzeugt:
.vscode/launch.json und .vscode/tasks.json
.dockerignore
Dockerfile
requirements.txt
Das Dockerfile enthält schon mal viel Schönes für eine Python-Docker-Entwicklungsumgebung.
Jetzt können wir einfach ein Image bauen. Das geht wie gelernt über die Konsole aber natürlich auch über die Docker Extension mit Rechtsklick auf unser Dockerfile.
Dann kann man das gewünschte Ziel aller Bemühungen - einen Container mit
der passenden Python Umgebung für unsere App - einfach per
docker run imagename ausführen.
Das Debugging funktioniert auf Knopfdruck (oben) in der Run and Debug Abteilung von VSCode.
Jetzt kommen wir zum aktuellen Schwachpunkt dieser Lösung: bei Veränderungen am Code muss man immer wieder Image(s) bauen und neue Container ausführen (run). Das sind eine Menge dangling Images und immer wieder neue Container.
Hinweis
Bei komplexeren Projekten und weiteren beteiligten Skripttechniken wird das Debuggen immer schwieriger. Es wäre schön, wenn die Debug-Technik nicht umständlich vom Host in den Container geleitet werden müsste.
Für das Debuggen finde ich Schleifen jut:
# Initialisiere die Zählvariable
count = 1
# Äußere Schleife für die Zeilenumbrüche
for row in range(1, 11):
# Innere Schleife für die Ausgabe von 10 Zahlen pro Zeile
for col in range(1, 11):
# Gib die aktuelle Zahl aus und erhöhe den Zähler
print(f"{count:2d}", end=" ")
count += 1
# Zeilenumbruch nach 10 Zahlen
print()