Isoliere jedes Projekt in seinem eigenen venv, pinne die Abhängigkeiten und übernimm eine reproduzierbare Projektstruktur.
Diese Lektion in Kodokon öffnenDie 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.
python -m venv .venv
source .venv/bin/activate
# On Windows:
# .venv\Scripts\activate
python -m pip install requests
python -m pip listUm 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.
python -m pip freeze > requirements.txt
# On another machine:
python -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txtAuf 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.
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