Ein Projekt, ein Satz Bibliotheken
Projekte brauchen Bibliotheken von Drittanbietern wie numpy oder pandas, und verschiedene Projekte brauchen verschiedene Versionen. Alles in ein gemeinsames Python zu installieren lässt Versionen kollidieren: Ein Upgrade für ein Projekt bricht ein anderes. Eine virtuelle Umgebung ist ein privater Ordner mit einer eigenen Kopie des Python-Interpreters und eigenen installierten Bibliotheken, sodass jedes Projekt genau das hat, was es braucht. pip ist das Werkzeug, das Bibliotheken aus dem Python Package Index (PyPI) lädt und in die aktive Umgebung installiert.
# Create an environment in the project folder (once)
python -m venv .venv
# Activate it (every new terminal)
source .venv/bin/activate # macOS and Linux
.venv\Scripts\activate # Windows
# The prompt now shows (.venv); python and pip belong to it
python -c "import sys; print(sys.prefix)"
# Leave it
deactivateMit pip installieren
Bei aktiver Umgebung fügt pip install numpy eine Bibliothek hinzu, pip install numpy==1.26.4 legt eine exakte Version fest, pip install -U numpy aktualisiert sie und pip uninstall numpy entfernt sie. pip list zeigt das Installierte. Rufen Sie es im Zweifel als python -m pip auf, was sicherstellt, dass es zum selben Python gehört, das Sie ausführen. Verwenden Sie nie sudo pip und installieren Sie nicht ins System-Python.
# Install, pin and inspect (environment active)
python -m pip install numpy pandas
python -m pip install "scipy>=1.11,<2"
python -m pip list
# Show one library
python -m pip show numpyrequirements.txt und Versionsregeln
Eine Requirements-Datei listet die Bibliotheken auf, die ein Projekt braucht, eine pro Zeile, sodass jeder die Umgebung mit pip install -r requirements.txt neu aufbauen kann; pip freeze > requirements.txt schreibt die exakt installierten Versionen. Jede Zeile besteht aus einem Namen und einem optionalen Versionsbezeichner: ==1.26.4 (genau), >=2.0 (mindestens), <3 (darunter), !=2.1 (alles außer) und ~=1.4.2 (kompatibel: mindestens 1.4.2, aber noch 1.4.x). Zeilen mit # sind Kommentare. Versionen werden teilweise als Zahlen verglichen, 1.10 ist also neuer als 1.9, nicht älter.
# A version is a tuple of numbers, not a string
print("1.10" > "1.9") # False (text order is wrong!)
def version_tuple(text):
return tuple(int(part) for part in text.split("."))
print(version_tuple("1.10") > version_tuple("1.9")) # True
print(version_tuple("2.0.1")) # (2, 0, 1)
# Reading one requirements line
line = "numpy>=1.26 # for arrays"
name_and_spec = line.split("#", 1)[0].strip()
print(name_and_spec) # numpy>=1.26Gewohnheiten, die Projekte reproduzierbar halten
Legen Sie pro Projekt eine Umgebung an und halten Sie sie als .venv im Projekt, aber committen Sie sie nicht: Sie ist groß und rechnerspezifisch. Committen Sie stattdessen requirements.txt (oder pyproject.toml). Schreiben Sie lockere Regeln (>=) für das, was Sie brauchen, und legen Sie exakte Versionen (==) fest, wenn Sie Ergebnisse reproduzieren müssen. Wenn etwas hakt, können Sie .venv jederzeit löschen und in einer Minute aus der Requirements-Datei neu aufbauen.
# requirements.txt
numpy==1.26.4 # pinned: reproduce results exactly
pandas>=2.0 # at least 2.0
scipy~=1.11.0 # 1.11.x, but not 1.12
# plotting waits until we need it
# Rebuild the environment anywhere
python -m venv .venv
python -m pip install -r requirements.txt
# Record what is installed right now
python -m pip freeze > requirements.txtimport scheitert beim Ausführen Ihres Codes. Prüfen Sie vor jeder Installation, dass der Prompt (.venv) zeigt und dass python -c "import sys; print(sys.prefix)" in Ihr Projekt zeigt.python -m venv .venv, dann aktivieren: eine Umgebung pro Projekt.python -m pip install name==version,pip install -r requirements.txt,pip freeze.- Bezeichner:
==,>=,<,!=,~=; Versionen als Zahlentupel vergleichen; Requirements committen, nicht.venv.
Als Nächstes: Git-Grundlagen, um jede Änderung an Ihrem Code zu verfolgen und zurückzugehen, wenn etwas kaputtgeht.
Lab: Was bewertet wird
- Mit
parse_requirementeine Requirements-Zeile lesen25 Pkt. - Mit
parse_requirementseine ganze Requirements-Datei lesen25 Pkt. - Mit
version_tupleVersionen vergleichbar machen25 Pkt. - Mit
satisfieseine Version gegen eine Regel prüfen25 Pkt.