Python in der Praxis

⚠️
Diese Seite ist ein Entwurf und wird noch erweitert. Wenn Sie Fehler finden, Ergänzungen vorschlagen möchten oder Fragen haben, melden Sie sich gerne bei uns!
ℹ️
Die auf dieser Seite genannten Firmen, Dienste und Produkte stellen keine Empfehlung dar. Es handelt sich lediglich um Beispiele zur Veranschaulichung. Es gibt zahlreiche weitere Angebote auf dem Markt, die für Ihre Zwecke ebenso oder besser geeignet sein können. Wir empfehlen, vor der Nutzung eines Dienstes die aktuellen Konditionen, Datenschutzbestimmungen und Bewertungen selbst zu prüfen.

Diese Seite richtet sich an Studierende, die ihre Python- oder Flask-Projekte außerhalb des CS50-Codespaces entwickeln oder im Internet veröffentlichen möchten. Die hier beschriebenen Themen gehen über den Stoff der Vorlesung hinaus, können aber für das Abschlussprojekt nützlich sein.

Virtuelle Umgebungen

Wenn Sie Python-Projekte auf Ihrem eigenen Rechner entwickeln, sollten Sie für jedes Projekt eine virtuelle Umgebung (Virtual Environment) verwenden. Warum?

  • Verschiedene Projekte benötigen oft unterschiedliche Versionen derselben Bibliothek
  • Ohne virtuelle Umgebungen installieren Sie alles “global” – das führt schnell zu Konflikten
  • Mit virtuellen Umgebungen hat jedes Projekt seine eigene, isolierte Sammlung von Bibliotheken

venv (in Python eingebaut)

Python bringt das Modul venv bereits mit:

# Virtuelle Umgebung erstellen (einmalig pro Projekt)
python3 -m venv .venv

# Virtuelle Umgebung aktivieren (bei jeder neuen Terminal-Session)
# Linux/macOS:
source .venv/bin/activate
# Windows (PowerShell):
.venv\Scripts\Activate.ps1
# Windows (CMD):
.venv\Scripts\activate.bat

# Jetzt können Sie Pakete installieren – sie landen nur in dieser Umgebung
pip install flask

# Virtuelle Umgebung deaktivieren
deactivate

Der Ordner .venv enthält eine Kopie des Python-Interpreters und alle installierten Pakete. Er sollte nicht ins Git-Repository eingecheckt werden (in .gitignore eintragen).

uv (moderner und schneller)

uv ist ein modernes Tool, das pip und venv ersetzt und deutlich schneller ist:

# uv installieren (einmalig)
# macOS/Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows:
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

# Neues Projekt erstellen
uv init mein-projekt
cd mein-projekt

# Paket hinzufügen (erstellt automatisch virtuelle Umgebung)
uv add flask

# Programm ausführen
uv run python app.py

# Oder: Flask starten
uv run flask run

uv verwaltet die virtuelle Umgebung automatisch und speichert die Abhängigkeiten in einer pyproject.toml-Datei.

Dependencies verwalten

Damit andere Personen (oder Sie selbst auf einem anderen Rechner) Ihr Projekt ausführen können, müssen die benötigten Bibliotheken dokumentiert werden.

requirements.txt (klassisch)

Die einfachste Methode ist eine requirements.txt-Datei:

Flask==3.0.0
requests==2.31.0

Installation aller Abhängigkeiten:

pip install -r requirements.txt

Aktuelle Versionen Ihrer installierten Pakete in eine Datei schreiben:

pip freeze > requirements.txt

pyproject.toml (modern)

Modernere Projekte verwenden pyproject.toml:

[project]
name = "mein-projekt"
version = "0.1.0"
dependencies = [
    "flask>=3.0.0",
    "requests>=2.31.0",
]

[project.optional-dependencies]
dev = [
    "pytest>=7.0.0",
]

Flask für Produktion

Der eingebaute Flask-Entwicklungsserver (flask run) ist nicht für den Produktivbetrieb geeignet:

  • Er verarbeitet nur eine Anfrage gleichzeitig
  • Er ist nicht auf Sicherheit optimiert
  • Er ist langsam

Für echte Webanwendungen benötigen Sie einen WSGI-Application-Server.

Gunicorn

Gunicorn ist ein beliebter WSGI-Server für Linux/macOS:

# Installation
pip install gunicorn

# Flask-App starten (4 Worker-Prozesse)
gunicorn -w 4 app:app

Der Befehl app:app bedeutet: In der Datei app.py die Variable app (Ihre Flask-Anwendung) starten.

Reverse Proxy mit nginx

In der Produktion stellt man Gunicorn typischerweise hinter einen Reverse Proxy wie nginx:

Internet → nginx (Port 80/443) → Gunicorn (Port 8000) → Flask-App

nginx übernimmt:

  • HTTPS/TLS-Verschlüsselung – Gunicorn spricht nur HTTP
  • Statische Dateien – CSS, JavaScript, Bilder werden direkt ausgeliefert
  • Load Balancing – Anfragen auf mehrere Gunicorn-Instanzen verteilen
  • Caching – Häufig angeforderte Inhalte zwischenspeichern

Eine einfache nginx-Konfiguration:

server {
    listen 80;
    server_name meine-app.de;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /static {
        alias /pfad/zu/meiner/app/static;
    }
}

Hosting im Internet

Es gibt verschiedene Möglichkeiten, eine Flask-App im Internet zu hosten:

Platform-as-a-Service (PaaS)

Diese Dienste kümmern sich um Server, Deployment und Skalierung:

DienstKostenloses TierBesonderheiten
RenderJa (mit Einschränkungen)Einfaches Deployment via Git
Railway$5 StartguthabenSehr entwicklerfreundlich
Fly.ioJa (begrenzte Ressourcen)Container-basiert, weltweit verteilt
PythonAnywhereJaSpeziell für Python, sehr einfach
HerokuNein (früher ja)Klassiker, aber nicht mehr kostenlos

Beispiel: Deployment auf Render

  1. Erstellen Sie eine Datei render.yaml im Projektverzeichnis:
services:
  - type: web
    name: meine-flask-app
    env: python
    buildCommand: pip install -r requirements.txt
    startCommand: gunicorn app:app
  1. Pushen Sie Ihr Projekt zu GitHub
  2. Verbinden Sie das Repository auf render.com
  3. Render baut und deployt Ihre App automatisch

Eigener Server (VPS)

Für mehr Kontrolle können Sie einen Virtual Private Server (VPS) mieten:

Auf einem VPS müssen Sie alles selbst einrichten: Linux, Python, Gunicorn, nginx, Firewall, SSL-Zertifikate, Updates, Backups…

HTTPS mit Let’s Encrypt

Für HTTPS-Verschlüsselung können Sie kostenlose Zertifikate von Let’s Encrypt verwenden. Das Tool Certbot automatisiert die Einrichtung:

# Certbot installieren (Ubuntu/Debian)
sudo apt install certbot python3-certbot-nginx

# Zertifikat erstellen und nginx automatisch konfigurieren
sudo certbot --nginx -d meine-app.de

Certbot erneuert die Zertifikate automatisch vor Ablauf.

Checkliste für Produktion

Bevor Sie eine Flask-App öffentlich zugänglich machen:

  • Debug-Modus deaktivierenFLASK_DEBUG=0 oder app.run(debug=False)
  • Secret Key setzen – Zufälligen, geheimen Schlüssel für Sessions verwenden
  • HTTPS aktivieren – Niemals Passwörter über unverschlüsselte Verbindungen
  • Eingaben validieren – Niemals Benutzereingaben vertrauen
  • SQL-Injection verhindern – Prepared Statements verwenden (wenn Sie eine DB nutzen)
  • Fehlerseiten anpassen – Keine Stack Traces an Benutzer zeigen
  • Logging einrichten – Fehler protokollieren für Debugging
  • Backups – Regelmäßige Backups der Datenbank/Dateien

Weiterführende Ressourcen