~~REVEAL~~ ====== Übung zum Seminar "Mensch und Bot" ====== Dr. Raphael Wimmer Sommersemester 2025 ===== Überblick: 7. Mai 2025 - Diverses, Python ====== - Umgebungsvariablen und Pfade - Welche Python-IDE soll ich verwenden? - apt, pip, conda, virtualeenv (, docker) - Environments und Paketmanager für Python - uv - die eierlegende Wollmilchsau - Grundkonzepte Python ===== PATH ===== - Umgebungsvariablen: Key-Value-Paare, die vom OS innerhalb einer Shell den Programmen zur Verfügung gestellt werden. - Anzeigen/setzen mit `export` (Linux) bzw. `SET` (Windows) - PATH-Umgebungsvariable: wo liegen die ausführbaren Dateien - Reihenfolge relevant - das erstbeste Executable mit passendem Namen wird genommen. - (auch später relevant: `PYTHONPATH`) ===== Python IDEs ===== - jeder beliebige Text-Editor - vim (Anleitungen: [1](https://www.vimfromscratch.com/articles/vim-for-python), [2](http://liuchengxu.org/posts/use-vim-as-a-python-ide/)) - [Jetbrains PyCharm](https://www.jetbrains.com/pycharm/) (umfangreiche IDE speziell für Python) - [VisualStudio Code](https://code.visualstudio.com/) ([Tutorial](https://code.visualstudio.com/docs/python/python-tutorial)) - [repl.it](https://replit.com/) (kollaborative browser-basierte IDE) - weitere? ===== PEP 8 - Style Guide für Python ===== - **PEP**: *Python Enhancement Proposal* - ein Vorschlag, wie die Sprache weiterentwickelt werden soll - PEP 8 -- Style Guide for Python Code](https://www.python.org/dev/peps/pep-0008/) - `pycodestyle`: Kommandozeilentool, das Code auf PEP-8-Konformität prüft - Hier im Kurs: PEP-8-Regeln bitte einhalten (zwingend für Studienleistung), bis auf Regel zu max. Zeilenlänge - Link-Tipp: Vortrag von Raymond Hettinger: [Beyond PEP 8 -- Best practices for beautiful intelligible code](https://www.youtube.com/watch?v=wf-BqAjZb8M&t=2s) ===== Paketmanagement in Python ===== Es gibt drei verbreitete Möglichkeiten, Python-Module zu installieren: - Paketmanagement des Betriebssystems (z.B. ``apt`` unter Debian/Ubuntu Linux) - ``pip`` - Pythons Paketmanager - ``conda`` - Paketmanagement der Anaconda-Distribution Um für jede Anwendung separate Module zu installieren: virtual environments ==== Paketmanagement durch Betriebssystem ==== - Primär bei Linux-Distributionen, z.B. Debian/Ubuntu - ``apt install python3-matplotlib`` - Vorteile: global verfügbar, sicher, vorkompilierte Binaries - Nachteile: nicht immer aktuell, nicht alle Python-Pakete verfügbar, immer nur eine Paketversion installierbar ==== Paketmanagement mit pip ==== - Pakete werden aus dem Python Package Index (PyPI) installiert (PyPI enthält quasi alle Pakete) - ``pip3 install matplotlib`` - ``pip3 install -r requirements.txt``: Textdatei mit Paketnamen und ggf. Versionen. - Vorteile: global oder (default) lokal installierbar, immer aktuellste Version, quasi alle Pakete verfügbar. - Nachteile: nicht zwingend robust/sicher, Kompilierungsschritt bei C-Erweiterungen notwendig - Tool `pipx`: installiert Python-**Programme** in einer eigenen virtuellen Umgebung und fügt sie zum Pfad hinzu ([Repo / Anleitung](https://github.com/pypa/pipx)) ==== Paketmanagement mit conda ==== - Anaconda: Python-Distribution für Scientific Computing (multi-platform) - Minimale Distribution: [miniconda](https://docs.conda.io/en/latest/miniconda.html) - ``conda``: package manager für Anaconda ([Intro](https://conda.io/projects/conda/en/latest/user-guide/getting-started.html)) - pip und conda können parallel eingesetzt werden ([1](https://www.anaconda.com/blog/understanding-conda-and-pip), [2](https://pythonspeed.com/articles/conda-vs-pip/)) - Alternative: [Mamba](https://github.com/mamba-org/mamba) - Vorteile: sicher, robust, vorkompilierte Binaries, integrierte Unterstützung von *virtual environments* - Nachteile: nicht immer aktuell, wenige Python-Pakete verfügbar, fügt Overhead (Ressourcen, Debugging) hinzu ==== Virtual Environments ==== - Grundidee: für jedes Projekt eine eigene Python-Installation ([Doku](https://docs.python.org/3/library/venv.html)) - Funktionsweise: Überschreiben der Pfade zu Binaries, Bibliotheken in der aktuellen Shell - Virtualenv im Unterverzeichnis ``.env`` anlegen: ``python3 -m venv .env`` - Virtualenv aktivieren: ``source .env/bin/activate`` (Linux) / ``.env\Scripts\activate.bat`` - deaktivieren durch Beenden der Shell - Viele IDEs unterstützen venv ([VS Code](https://code.visualstudio.com/docs/python/environments), [PyCharm](https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html)) - Conda: ``conda create --name myenv`` / ``conda activate myenv`` ==== uv - die eierlegende Wollmilchsau ==== - Tool für gängiges Python-Projektmanagement ([Doku](https://docs.astral.sh/uv/) - sehr schnell (Rust, Caching) - Wrapper für viele gängige Aktionen: - `uv python install ` - installiert Python - `uv init ` - erzeugt Projektverzeichnis, initialisiert venv und Git. - `uv add ` - fügt Paket zu Projekt hinzu - `uv run ` - führt Script in aktuellem venv aus - `uv pip <...>` / `uv venv <...>` - wrappt pip/venv - [Ausführliche Diskussion](https://www.bitecode.dev/p/a-year-of-uv-pros-cons-and-should) ===== Überblick: 21. Mai 2025 - Erste Chatbots ====== ==== ELIZA ==== - Python-Quellcode: https://github.com/wadetb/eliza - Eure Aufgaben: - Code zum Laufen bringen - Etwas an den Antworten ändern - Ausgeben, was unter der Haube passiert (optional) ==== Eigener Chatbot ==== - Eure Aufgabe: schreibt einen eigenen Chatbot mit einer Heuristik - notwendig: loops, ´input()/rawinput()´, evtl. regex oder String-Operationen - Anforderungen: reagiert auf bestimmte Schlüsselwörter