Kodokon kodokon.com

Virtuelle Umgebungen, pip und ein sauberes Projekt

Isoliere jedes Projekt in seinem eigenen venv, pinne die Abhängigkeiten und übernimm eine reproduzierbare Projektstruktur.

8 Min. · 3 Fragen

Diese Lektion in Kodokon öffnen

Die Abhängigkeiten all deiner Projekte im selben Interpreter zu installieren führt geradewegs zu einem Versionskonflikt: Projekt A braucht requests 2.31, Projekt B eine inkompatible Version. Die virtuelle Umgebung (venv) isoliert jedes Projekt: seinen Interpreter, sein pip, seine Pakete. Das ist die nicht verhandelbare professionelle Praxis - ein Projekt, eine Umgebung, auf jeder Maschine identisch wiederherstellbar.

BASH
python -m venv .venv
source .venv/bin/activate
# On Windows:
# .venv\Scripts\activate
python -m pip install requests
python -m pip list
Eine virtuelle Umgebung erstellen, aktivieren und befüllen

Um die Installation reproduzierbar zu machen, pinne die Versionen. pip freeze exportiert die gesamte Umgebung, transitive Abhängigkeiten inklusive, mit exakten Versionen: maximale Reproduzierbarkeit, mühsame Aktualisierungen. Der moderne Ansatz trennt die beiden Bedürfnisse: die direkten Abhängigkeiten in pyproject.toml mit lockeren Einschränkungen deklariert, und eine für die exakte Installation generierte Lock-Datei. Im Maßstab eines kleinen Projekts bleibt requirements.txt völlig respektabel.

BASH
python -m pip freeze > requirements.txt
# On another machine:
python -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
Einfrieren und die Umgebung dann identisch neu aufbauen

Auf der Strukturseite ist das src-Layout die Referenz: Der Code liegt in src/<package>/, die Tests in tests/, die Konfiguration in pyproject.toml. Der Sinn des src-Ordners ist nicht kosmetisch: Er verhindert, dass man das lokale Paket versehentlich aus dem aktuellen Verzeichnis importiert, was Verpackungsfehler verbergen würde - deine Tests laufen gegen das tatsächlich installierte Paket. Während der Entwicklung installiert pip install -e . das Projekt im editierbaren Modus.

BASH
mkdir -p src/billing tests
touch src/billing/__init__.py
touch src/billing/invoices.py
touch tests/test_invoices.py
touch pyproject.toml README.md .gitignore
echo ".venv/" >> .gitignore
Gerüst eines Projekts im src-Layout

Wissenscheck

Stelle sicher, dass du die wichtigsten Punkte dieser Lektion behalten hast.

  1. Was garantiert eine virtuelle Umgebung?
    • Eine schnellere Ausführung von Python-Code
    • Isolierte Abhängigkeiten für jedes Projekt
    • Kompatibilität zwischen Python-Versionen
    • Verschlüsselung der installierten Pakete
  2. Was enthält eine von pip freeze generierte requirements.txt?
    • Nur deine direkten Abhängigkeiten
    • Jede installierte Abhängigkeit, exakte Versionen inklusive
    • Die Liste der auf PyPI verfügbaren Pakete
  3. Warum python -m pip install gegenüber pip install bevorzugen?
    • Es ist die einzige innerhalb eines venv akzeptierte Syntax
    • Der Befehl zielt auf das pip des aktiven Interpreters
    • Die Installation ist schneller