Tag 5 Venv, Abhängigkeiten, Clean Code, Jupyter Notebooks, Recap#

Recap#

Gestern wurde der Debugger gezähmt, Klassen eingeführt, Fehlerquellen und deren Behandlungen diskutiert sowie Ein- und Ausgaben behandelt. Welche Fragen sind aufgekommen und noch offen? –> Fragen stellen

Heute ist nach ein klein wenig Input noch viel Zeit mit den Aufgaben weiter zu machen, Fragen zu stellen und Lösungswege zu diskutieren. Auch die Abschlussaufgabe wird heute noch detaillierter vorgestellt und die Bewertungskriterien erläutert.

Abhängigkeiten und Pakete#

Wie schon bei der Einführung der Standardbiblothek Python-Standardbibliothek anfänglich erläutert, gibt es weit mehr Funktionalitäten in Python, die nicht standardmäßig abrufbar sind. Diese Funktionalitäten stehen in importierbaren Paketen (zusammengefasste Pythondateien) und ihren Modulen (eine datei.py) bereit. Um auf diese Funktionen und Klassen in Ihrem Code zu greifen zu können, muss das entsprechende Paket (oder auch nur Modul) mit dem import-Statement importiert werden. Bspw. import math, import random, import os. Dies sollte immer gebündelt in den ersten Zeilen des Programmes passieren. Die Standardbibliothek ist hier zu Teilen ein Sonderfall, da sie mit der Installation von Python schon mit dabei ist, jedoch dennoch noch importiert werden muss.

Andere Pakete, die beispielsweise geographische Verarbeitungen erlauben und vereinfachen, müssen jedoch zusätzlich heruntergeladen und installiert werden. Dies passiert mit Hilfe von s.g. Paketmanagern. Der standardmäßig installierte Paketmanager ist pip. Daneben gibt es bspw. noch Anaconda und Poetry. (Mehr Infos).

Da es auf Grund der Fülle von möglichen Zusatzpaketen (Tausende) zu Abhängigkeitskonflikten o.ä. zwischen diesen Paketen und deren Funktionalitäten kommen kann, ist es ratsam für jedes Projekt (oder Kurs) eine eigene Entwicklungsumgebung (environment) einzurichten.

Einw Python-Umgebung (environment), auch als virtuelle Umgebung bekannt, ist eine isolierte Umgebung, in der Python-Installationen, Pakete und Abhängigkeiten für ein Projekt gehalten werden können. Dies ermöglicht es, Projektabhängigkeiten zu verwalten und Konflikte zwischen verschiedenen Projekten zu vermeiden. Python-Umgebungen werden häufig mit Tools wie virtualenv, venv, Anaconda oder pipenv erstellt.

Umgebungen sind nützlich, wenn Sie mehrere Projekte haben, die unterschiedliche Versionen von Python oder unterschiedliche Versionen von Paketen benötigen. Sie können auch dazu beitragen, die Systeminstallation von Python sauber zu halten und die Installation von Paketen auf Systemebene zu vermeiden. Systemweite Installationen sollten umbedingt vermieden werden!

Zusammenfassend: Ein Paket ist eine Sammlung von Modulen, die in einem Verzeichnis organisiert sind, während Module einzelne Dateien mit Python-Code sind. Umgebungen bieten eine isolierte Umgebung für die Verwaltung von Python-Installationen und Abhängigkeiten.

How to venv#

Um eine virtuelle Umgebung in Python zu erstellen und zu verwenden, Können Sie die folgenden Schritte mit dem venv-Modul, das in der Python-Standardbibliothek enthalten ist (Python 3.3 und später), befolgen:

  1. Navigiere zu deinem Projektverzeichnis: Öffnen Sie Ihr Terminal oder die Eingabeaufforderung und navigieren Sie zum Verzeichnis, in dem Sie die virtuelle Umgebung erstellen möchten. Verwenden Sie das cd-Kommando, um die Verzeichnisse zu wechseln.

  2. Erstelle eine virtuelle Umgebung: Führen Sie den folgenden Befehl aus, um eine virtuelle Umgebung zu erstellen. Ersetzen Sie meineumgebung durch den Namen, den Sie Ihrer virtuellen Umgebung geben möchten.

    python3 -m venv meineumgebung

Dieser Befehl erstellt ein neues Verzeichnis namens meineumgebung, das die virtuelle Umgebung enthält. 3. Aktiviere die virtuelle Umgebung: Sie müssen die virtuelle Umgebung aktivieren, bevor Sie sie verwenden können. Führen Sie den entsprechenden Befehl für Ihr Betriebssystem aus:

Unter Windows:

``meineumgebung\Scripts\activate``

Unter Unix oder MacOS:

``source meineumgebung/bin/activate``

Nach der Aktivierung sehen Sie den Namen der virtuellen Umgebung (meineumgebung) in deinem Terminal oder der Eingabeaufforderung.

  1. Installieren Sie Abhängigkeiten (Pakete): Sobald die virtuelle Umgebung aktiviert ist, können Sie Python-Pakete und Abhängigkeiten mit pip installieren. Zum Beispiel:

    pip install paketname

  2. Deaktivieren Sie die virtuelle Umgebung: Um die virtuelle Umgebung zu deaktivieren und zum globalen Python-Umfeld zurückzukehren, führen Sie einfach aus:

    deactivate

Durch diese Schritte können Sie virtuelle Umgebungen in Python mit venv erstellen und verwalten. Dadurch werden Ihre Projektabhängigkeiten von anderen Projekten und der globalen Python-Installation isoliert.

Es ist in etwa dasselbe Prozedere mit Anaconda oder poetry.

Transkription

  1. Nehmen Sie eine kurze Sprachnachricht auf. Bspw. mit der Diktifunktion Ihres Telefons.

  2. Importieren Sie diese Datei auf Ihren PC in ihr Current Working Directory (cwd) (überprüfen mit os.getcwd())

  3. Erstellen Sie ein neues Python-Environment mit der Python Version 3.11.

  4. Installieren Sie das modul whisper. Schauen Sie sich hierzu das Github Repository an.

  5. Öffnen Sie nun Ihre Sprachnachricht und transkribieren Sie diese mit Hilfe von dem Modul Whisper. Geben Sie die Transkription zunächst nur auf Ihre Commandline aus.

  6. Speichern Sie nun das Ergebnis in einer Textdatei ab.

Jupyter Notebook & dessen Erweiterung JupyterLab#

Klassische Jupyter Notebooks sind interaktive Dokumente, die sowohl Code als auch Text enthalten können. Sie sind in Zellen unterteilt, in denen Code ausgeführt und Ergebnisse direkt angezeigt werden können. Diese Notebooks sind besonders beliebt in Bereichen wie Datenanalyse, maschinelles Lernen und wissenschaftliches Rechnen, da sie eine effektive Möglichkeit bieten, Code zu schreiben, zu dokumentieren und zu visualisieren.

JupyterLab ist eine Weiterentwicklung von Jupyter Notebooks, die eine umfangreichere Benutzeroberfläche und mehr Funktionalitäten bietet. Es ermöglicht nicht nur die Verwendung von Notebooks, sondern auch die gleichzeitige Bearbeitung von Textdateien, interaktiven Visualisierungen, Terminalfenstern und vielem mehr in einer einzigen Benutzeroberfläche.

Verwendung von JupyterLab im Terminal#

Um Jupyter Notebooks im Terminal zu verwenden, müssen Sie sicherstellen, dass Sie die Jupyter-Bibliothek installiert haben (pip install notebook oder pip install jupyterlab). Dann können Sie den Befehl jupyter notebook oder jupyter lab ausführen, um den Jupyter-Server zu starten. Sie erhalten eine URL, die Sie in Ihrem Webbrowser öffnen können, um die Jupyter-Benutzeroberfläche zu verwenden und neue Notebooks zu erstellen oder vorhandene zu öffnen.

# Starten Sie den Jupyter-Server im Terminal
> jupyter lab

Verwendung von Jupyter Notebooks in VSCode#

In Visual Studio Code können Sie die Jupyter-Erweiterung verwenden, um Jupyter Notebooks zu erstellen und auszuführen. Sie können die Erweiterung über den Extensions Marketplace installieren. Nach der Installation können Sie einfach eine neue .ipynb-Datei erstellen oder eine vorhandene öffnen.

Ablauf:

  • Installieren Sie die Jupyter-Erweiterung in VSCode.

  • Öffnen Sie VSCode und erstellen Sie eine neue .ipynb-Datei.

  • Schreiben Sie Ihren Code in Codezellen und Dokumentation in Textzellen.

  • Führen Sie den Code in den Zellen aus und betrachten Sie die Ergebnisse direkt in VSCode.

Durch die Verwendung von Jupyter Notebooks in VSCode erhalten Sie die Vorteile der Jupyter-Benutzeroberfläche innerhalb Ihrer vertraut(er)en Entwicklungsumgebung.

Schritt für Schritt Anleitung

Good & Clean Code#

“Clean Code” bezieht sich auf die Praxis des Schreibens von Code in einer klaren, verständlichen und leicht wartbaren Weise. Die Prinzipien des Clean Code betonen Lesbarkeit, Klarheit und Einfachheit. Hier sind einige wichtige Pragmatismen des Clean Code:

Aussagekräftige Namen verwenden: Verwenden Sie aussagekräftige Variablen-, Funktions- und Klassennamen, um den Code verständlicher zu machen.

Kurze und präzise Funktionen: Funktionen sollten kurz sein und genau eine Aufgabe erledigen. Lange Funktionen sollten in kleinere Funktionen aufgeteilt werden.

Vermeidung von überflüssigem Code: Entfernen Sie unnötigen Code und Kommentare, um die Lesbarkeit zu verbessern und Redundanz zu vermeiden.

Regelmäßige Formatierung: Halten Sie sich an eine konsistente Formatierung des Codes, um ihn leichter lesbar zu machen.

Kommentierung, wenn nötig: Kommentieren Sie Ihren Code, um komplexe Teile zu erklären oder wichtige Informationen zu liefern, aber vermeiden Sie unnötige Kommentare. Leitlinie: So viel wie nötig, so wenig wie möglich.

PEP 20 - Das Zen von Python:#

PEP 20 ist ein Dokument mit dem Titel “Das Zen von Python”, das die philosophischen Leitlinien für die Entwicklung von Python-Software darstellt. Es wurde von Tim Peters verfasst und beschreibt die grundlegenden Prinzipien, die hinter dem Design der Python-Sprache stehen. Um den gesamten Zen of Python bestaunen zu dürfen, führen Sie import this im REPL aus.

Weitere Hilfsmittel und Leitlinien für besseren Code sind black, pre-commit hooks und zahlreiche Erweiterungen in VSCode. Hiermit sollten Sie sich zu Zeiten mal mit auseinandersetzen, stellt aber zum Momentanen Zeitpunkt kein MUSS dar.

Kniffel? Yahtzee!

Stellen Sie sich vor, sie arbeiten für eine kleine, inhabergeführte Software-Schmiede und einer ihrer Kollegen hat etwas Arbeit in ein Projekt für die Deutsche Kniffel-Gesellschaft gesteckt. Der Vertrag läuft über 10 Stunden, und Ihr Kollege sitzt bereits 8.5 Stunden an dem Projekt. Am Montag kommen Sie frisch wie eh und je ins Büro, und ihr Kollege ist leider krank. Heute wäre sein Geburtstag gewesen, er hätte Kuchen mitgebracht. Ihre Chefin hat Sie gebeten, für den Kollegen zu übernehmen. Sie möchte, dass Sie noch eine gute Stunde an dem Code weiterarbeiten, damit sie die vollen 10 Stunden abrechnen kann. Sie weist Sie an, den Code ein bisschen aufzuräumen und gegebenenfalls ein paar Notizen zu machen, die Ihrem kranken Kollegen als Feedback zu seinem Code dienen können.

Der Code findet sich in yatzy.py. Die Tests Ihres Kollegen finden sich in test_yatzy.py. Die benötigten Abhängigkeiten sind wie immer in requirements.txt, dies ist schließlich Firmen-Standard. Ihre Chefin meint, die Tests seien bereits komplett und müssen nicht mehr angepasst werden; der Kunde hätte sie bereits abgesegnet. Die Notizen Ihres Kollegen finden Sie auf seinem Tisch:

  • Regeln für Kniffel -> Wikipedia

  • Code: Score für gegebenen Wurf in gegebener Kategorie berechnen

  • Nicht: Würfeln programmieren

  • Nicht: Logik, die beste Kategorie bestimmt!

  • python -m pip install requirements.txt, python -m pytest

Inspiration für diese Kata von Emily Bache über github, Code von Emily Bache über github.

Abschlussaufgabe#

Future Outlook#