Ubuntu 24.04 bringt Python 3.12 mit, doch Pakete mit einem einfachen pip zu installieren scheitert inzwischen mit der Meldung „externally-managed-environment“. Die Lösung: jedes Projekt in einer eigenen virtuellen Umgebung isolieren. Diese Anleitung zeigt, wie Sie Ihren VPS Linux Infrawire vorbereiten, Abhängigkeiten sauber verwalten und eine Anwendung dauerhaft als systemd-Dienst betreiben.
📋 Voraussetzungen
- Ein VPS mit Ubuntu 24.04 oder Debian 12 und SSH-Root-Zugang (IP und Root-Passwort stehen in Ihrem Kundenbereich)
- Ein Python-Projekt oder ein einfaches Testskript
- Grundkenntnisse in der Kommandozeile
1. Python 3, pip und venv installieren
Python 3 ist meist vorinstalliert, pip und das venv-Modul sind jedoch eigene Pakete.
Bashapt update apt install -y python3 python3-pip python3-venv python3-dev build-essential python3 --version pip3 --version
2. Den PEP-668-Fehler verstehen
Wenn Sie als root unter Ubuntu 24.04 oder Debian 12 pip install requests ausführen, erscheint:
TEXTerror: externally-managed-environment
Dieser Schutz (PEP 668) verhindert, dass pip Dateien überschreibt, die apt gehören, und Systemwerkzeuge beschädigt. Umgehen Sie ihn nicht mit --break-system-packages. Nutzen Sie stattdessen eine der folgenden sauberen Möglichkeiten.
3. Virtuelle Umgebung erstellen
Eine virtuelle Umgebung ist eine private Kopie von Python und pip für ein einzelnes Projekt.
Bashmkdir -p /opt/myapp && cd /opt/myapp python3 -m venv venv source venv/bin/activate pip install --upgrade pip pip install requests flask gunicorn
Der Prompt beginnt jetzt mit (venv). Mit deactivate verlassen Sie die Umgebung.
4. Abhängigkeiten mit requirements.txt verwalten
Halten Sie die exakten Versionen fest, damit sich das Projekt auf einem anderen Server identisch aufbauen lässt.
Bashpip freeze > requirements.txt # Auf einem frischen System python3 -m venv venv source venv/bin/activate pip install -r requirements.txt
5. Kommandozeilenwerkzeuge mit pipx installieren
Für eigenständige Werkzeuge (httpie, yt-dlp, black ...) gibt pipx jedem eine eigene, versteckte virtuelle Umgebung und stellt den Befehl global bereit.
Bashapt install -y pipx pipx ensurepath pipx install httpie
Öffnen Sie danach eine neue Shell, damit der aktualisierte PATH geladen wird. Für eine Bibliothek mit Debian-Paket ist auch apt install python3-requests eine gültige Wahl.
6. Die Anwendung als systemd-Dienst betreiben
Legen Sie einen eigenen unprivilegierten Benutzer an und danach eine Unit, die den Interpreter aus der virtuellen Umgebung startet (hier Gunicorn mit einem Flask-Objekt app in app.py).
Bashuseradd --system --home /opt/myapp --shell /usr/sbin/nologin myapp chown -R myapp:myapp /opt/myapp
Erstellen Sie /etc/systemd/system/myapp.service:
INI1[Unit] 2Description=My Python application 3After=network.target 4 5[Service] 6User=myapp 7WorkingDirectory=/opt/myapp 8ExecStart=/opt/myapp/venv/bin/gunicorn --bind 127.0.0.1:8000 app:app 9Restart=on-failure 10RestartSec=5 11 12[Install] 13WantedBy=multi-user.target
Bashsystemctl daemon-reload systemctl enable --now myapp
Setzen Sie einen Reverse-Proxy wie nginx vor Port 8000, um die Anwendung im Internet bereitzustellen.
✅ Prüfen
Bashwhich python # muss bei aktivierter Umgebung nach /opt/myapp/venv zeigen pip list systemctl status myapp --no-pager journalctl -u myapp -n 50 --no-pager curl -I http://127.0.0.1:8000
🔧 Fehlerbehebung
The virtual environment was not created successfully because ensurepip is not available : Das venv-Paket fehlt. Installieren Sie es mit apt install python3-venv (oder python3.12-venv) und wiederholen Sie den Befehl.
status=203/EXEC in systemd : Der Pfad in ExecStart ist falsch, oder die Datei ist für den Dienstbenutzer nicht ausführbar. Prüfen Sie mit ls -l /opt/myapp/venv/bin/gunicorn und den oben gesetzten Besitzrechten.
ModuleNotFoundError nur unter systemd : Der Dienst nutzt das System-Python statt der virtuellen Umgebung. Rufen Sie in ExecStart immer /opt/myapp/venv/bin/python oder die Binärdatei in venv/bin auf.
pip: command not found : Verwenden Sie python3 -m pip oder aktivieren Sie zuerst die virtuelle Umgebung.
🎉 Ihre Python-Projekte sind jetzt isoliert, reproduzierbar und laufen als zuverlässiger Dienst!