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

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()