Python in der Praxis
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
deactivateDer 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 runuv 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.0Installation aller Abhängigkeiten:
pip install -r requirements.txtAktuelle Versionen Ihrer installierten Pakete in eine Datei schreiben:
pip freeze > requirements.txtpyproject.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:appDer 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-Appnginx ü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:
| Dienst | Kostenloses Tier | Besonderheiten |
|---|---|---|
| Render | Ja (mit Einschränkungen) | Einfaches Deployment via Git |
| Railway | $5 Startguthaben | Sehr entwicklerfreundlich |
| Fly.io | Ja (begrenzte Ressourcen) | Container-basiert, weltweit verteilt |
| PythonAnywhere | Ja | Speziell für Python, sehr einfach |
| Heroku | Nein (früher ja) | Klassiker, aber nicht mehr kostenlos |
Beispiel: Deployment auf Render
- Erstellen Sie eine Datei
render.yamlim Projektverzeichnis:
services:
- type: web
name: meine-flask-app
env: python
buildCommand: pip install -r requirements.txt
startCommand: gunicorn app:app- Pushen Sie Ihr Projekt zu GitHub
- Verbinden Sie das Repository auf render.com
- Render baut und deployt Ihre App automatisch
Eigener Server (VPS)
Für mehr Kontrolle können Sie einen Virtual Private Server (VPS) mieten:
- Hetzner – Günstig, deutsche Server
- DigitalOcean – Gute Dokumentation
- Linode – Solide Option
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.deCertbot erneuert die Zertifikate automatisch vor Ablauf.
Checkliste für Produktion
Bevor Sie eine Flask-App öffentlich zugänglich machen:
- Debug-Modus deaktivieren –
FLASK_DEBUG=0oderapp.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
- Flask Deployment Documentation
- The Twelve-Factor App – Best Practices für Web-Apps
- Real Python: Flask Deployment
- DigitalOcean Tutorials – Viele gute Server-Anleitungen