Zum Inhalt

VS Code und Python

Debugging

Das komfortable Debuggen von programmierten Code ist eine zentrale Funktion einer Entwicklungsumgebung. Daher ist die Unterstützung sehr wichtig! VS Code unterstützt dies für sehr viele Programmiersprachen. Dies soll mit der Python demonstriert werden.

Ist ein Python-Skript erzeugt, dann soll es untersucht werden. Dazu dient folgendes Beispiel:

deb_1.py

data = { "name":"vari","val":123}

def func(a):
    erg = a*234
    return erg


def main():
    v1 = 23.32
    v2 = 0.001
    s1 = func(v1)
    s2 = func(v1+v2)
    print(f'erg1 = {s1}s,   erg2={s2}mm')


if __name__ == "__main__":
    main()
Download: File

Starten des Debug-Vorgangs

Start

Da das Programm immer wieder im Debug-Modus untersucht werden muss, sollte unbedingt eine Debug-Einstallung launch.json angelegt werden:

init

Auswahl der Debuggers (1)

init2

Auswahl der Debuggers (1)

init3

Automatisch generierte ./.vscode/launch.json Datei

init4

Die gemnerierte lauch.jsonkann jederzeit geändert oder erweitert werden:

lauch.json
{
    // Verwendet IntelliSense zum Ermitteln möglicher Attribute.
    // Zeigen Sie auf vorhandene Attribute, um die zugehörigen Beschreibungen anzuzeigen.
    // Weitere Informationen finden Sie unter https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python-Debugger: Aktuelle Datei",
            "type": "debugpy",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal"
        }
    ]
}

Eine Erweiterung kann die Konfiguration "MainApp" sein, in der die aktuelle Version eines Hauptprogramms gesetz wird. So muss nicht zwingend das auszuführende py-Skript im Editor geladen sein ("aktuelle Datei"):

lauch.json
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "mainApp mit Args",
            "type": "debugpy",
            "request": "launch",
            "program": "deb_1.py", // (1)
            "console": "integratedTerminal",
            "args": ["--port", "1890"] // (2)
        },
        {
            "name": "Python-Debugger: Aktuelle Datei",
            "type": "debugpy",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal"
        }
    ]
}

  1. mainApp
  2. Argumente, die in der mainApp ausgewertet werden können

Debug-Lauf

Um ein Skript untersuchen zu können, müssen sogenannte "Breakpoints" vorhanden sein. Diese lassen sich im Editor durch Klick in der linken Spalte anlegen:

Breakpoints

Angehaltenes Skript mit Variableninhalten:

Braek_Deb

Eine interaktive Untersuchung von Daten - auch mittels Skripting - kann mit der Debugkonsole gestartet werden:

Deb_Console

Jupyter-Notebook

Eine noch stärker interaktiv ausgeprägte Vorgehensweise bei der Entwicklung von Skripten kann mit dem Jupyter-Notebook realsiert werden. Diese Variante findet zwei Realsierungen:

a. Webserverbasiert (JupyterLab) b. VS Code - integriert (Jupyter)

Wenn VS Code eh genutzt wird, dann bietet sich diese Variante direkt an. Der Start ist denkbar einfach: Erzeuge eine neue Datei mit der Endung ipynb (interactive python notebook). Beim ersten Mal erkennt VSC den neuen Dateityp und installiert die Jupyter-Umgebung für den aktive Python-Interpreter. Danach erscheint ein Block-orientierte Editor, die in Code-Bereich und optionalen "Markdown-"Bereich untergliedert ist:

Beispiel

ipynb_1

Die nachfolgende Grafik zeigt das komplette Beispiel. Dabei werden der Reihe nach die einzelnen Blöcke ausgeführt und der letzte Block zeigt die Konsolenausgabe mit print():

ipynb_2

Die weitere Vorgehensweise zeigt die Flexibilität und Freiheit von Jupyter-NB:

  • Blöcke lassen sich in beliebiger Reihenfolge (auch geändert!) wieder ausführen
  • Neue Blöcke (Code, Markdown) lassen überall einfügen, verschieben oder löschen.
  • Dokumentation mit der Markdown-Syntax ( Link)

Plotausgabe:

Um im Notebook direkt Plotausgaben anzeigen zu könne, braucht es die Installation einer VSC-Toolbox: Jupyter-Render:

ipynb_1

Remote-Entwicklung

Bisher wurden die Python-Programm lokal auf dem Rechner ausgeführt, auf dem auch mit VSC programmiert wurde. In der IoT ist es i.d.r. so, dass die Server bzw. Gateway's mit einem Netzwerk verbunden dezentral arbeiten. Für die Remote-Arbeit (auch über das Internet) müssen gesicherte Verbindungen aufgebaut werden, um mit den verschiedenen Werkzeugen auf dem Zielsystem arbeiten aus der Ferne (=Remote) zu können.

Info - Installation

In VSC muss die Erweiterung "Remote - SSH" installiert sein.

Link Packet Beschreibung
remote Remote - SSH Mit Remote - SSH kann jede entfernte Rechner mit einem SSH-Server als Entwicklungsumgebung genutzt. Dies kann die Entwicklung und Fehlersuche in einer Vielzahl von Situationen erheblich vereinfachen. Anmwendung sind die Entwicklung mit Servern, die auf Linux aufsetzen (z.B. Raspberry Pi, ..)

Test-Umgebung

Um die nachfolgenden Schritte testen zu können, braucht es ein Remote-System. Dies können sein:

  • virtuelle Systeme Kapitel
    • HyperV-Linux
    • VirtualBox-Linux
  • RaspberryPi
  • ...

SSH-Remote-Verbindung

Um eine SSH-Remote-Verbindung mit einem Server herstellen zu können, muss auf dem Server ein SSH-Server installiert sein. In der Regel werden heute (Windows, Linux) "OpenSSH-Server" eingesetzt. Für eine Verbindung werden benötigt:

  • IP-Adresse
  • Benutzer
  • Passwort

Ist die VSC-Remote-Erweiterung installiert, dann erscheint in der linken unteren Ecke des VSC folgendes Icon:

ssh_f

Starten:

ssh_1

neuen SSH-Host...

ssh_2

Verbindung als user@ip:

ssh_2

Verbindung speichern:

ssh_c

Nach erfolgreicher Verbindung: Ordner wählen

ssh_c1

Anmeldung (ist bei jeder neuen Verbindung bzw. Ordner-Wechsel erforderlich):

ssh_c2

Alle weiteren Schritte entsprechen dem lokalen Arbeiten bei der Python-Programmierung.

Info

  • Das Terminal ist ein SSH-Terminal, mit dem alle weiteren administrativen Aufgaben auf dem Zielsystemn ausgeführt werden können.
  • Zur Vorbereitung einer Python-Projektumgebung empfiehlt sich die Nutzung von UV !!! Kapitel