12. Virtuelle Umgebungen und Pakete

12.1. Einführung

Python-Anwendungen verwenden oft Pakete und Module, die nicht Teil der Standardbibliothek sind. Anwendungen benötigen manchmal eine bestimmte Version einer Bibliothek, da die Anwendung möglicherweise erfordert, dass ein bestimmter Fehler behoben wurde, oder die Anwendung möglicherweise mit einer veralteten Version der Schnittstelle der Bibliothek geschrieben wurde.

Dies bedeutet, dass es für eine Python-Installation möglicherweise nicht möglich ist, die Anforderungen jeder Anwendung zu erfüllen. Wenn Anwendung A Version 1.0 eines bestimmten Moduls benötigt, Anwendung B jedoch Version 2.0 benötigt, sind die Anforderungen widersprüchlich und die Installation von Version 1.0 oder 2.0 lässt eine Anwendung nicht lauffähig.

Die Lösung für dieses Problem ist die Erstellung einer virtuellen Umgebung, einem in sich geschlossenen Verzeichnisbaum, der eine Python-Installation für eine bestimmte Python-Version sowie eine Reihe zusätzlicher Pakete enthält.

Verschiedene Anwendungen können dann unterschiedliche virtuelle Umgebungen verwenden. Um das frühere Beispiel widersprüchlicher Anforderungen zu lösen, kann Anwendung A ihre eigene virtuelle Umgebung mit installierter Version 1.0 haben, während Anwendung B eine andere virtuelle Umgebung mit Version 2.0 hat. Wenn Anwendung B eine Bibliothek auf Version 3.0 aktualisieren muss, hat dies keine Auswirkungen auf die Umgebung von Anwendung A.

12.2. Erstellen von virtuellen Umgebungen

Das Modul zur Erstellung und Verwaltung virtueller Umgebungen heißt venv. venv installiert die Python-Version, von der aus der Befehl ausgeführt wurde (wie vom --version-Option angegeben). Beispielsweise installiert die Ausführung des Befehls mit python3.12 Version 3.12.

Um eine virtuelle Umgebung zu erstellen, entscheiden Sie sich für ein Verzeichnis, in dem Sie diese platzieren möchten, und führen Sie das Modul venv als Skript mit dem Verzeichnispfad aus

python -m venv tutorial-env

Dies erstellt das Verzeichnis tutorial-env, falls es noch nicht existiert, und erstellt darin auch Verzeichnisse, die eine Kopie des Python-Interpreters und verschiedene unterstützende Dateien enthalten.

Ein gängiger Speicherort für eine virtuelle Umgebung ist .venv. Dieser Name hält das Verzeichnis in Ihrer Shell typischerweise verborgen und somit aus dem Weg, während es ihm einen Namen gibt, der erklärt, warum das Verzeichnis existiert. Es verhindert auch Konflikte mit .env-Umgebungsvariablendateien, die von einigen Tools unterstützt werden.

Sobald Sie eine virtuelle Umgebung erstellt haben, können Sie diese aktivieren.

Unter Windows, führen Sie aus

tutorial-env\Scripts\activate

Unter Unix oder MacOS, führen Sie aus

source tutorial-env/bin/activate

(Dieses Skript ist für die Bash-Shell geschrieben. Wenn Sie die csh- oder fish-Shells verwenden, gibt es alternative Skripte activate.csh und activate.fish, die Sie stattdessen verwenden sollten.)

Das Aktivieren der virtuellen Umgebung ändert die Eingabeaufforderung Ihrer Shell, um anzuzeigen, welche virtuelle Umgebung Sie verwenden, und modifiziert die Umgebung so, dass die Ausführung von python Sie zu dieser bestimmten Version und Installation von Python bringt. Zum Beispiel

$ source ~/envs/tutorial-env/bin/activate
(tutorial-env) $ python
Python 3.5.1 (default, May  6 2016, 10:59:36)
  ...
>>> import sys
>>> sys.path
['', '/usr/local/lib/python35.zip', ...,
'~/envs/tutorial-env/lib/python3.5/site-packages']
>>>

Um eine virtuelle Umgebung zu deaktivieren, geben Sie ein

deactivate

in das Terminal ein.

12.3. Pakete mit pip verwalten

Sie können Pakete mit einem Programm namens pip installieren, aktualisieren und entfernen. Standardmäßig installiert pip Pakete aus dem Python Package Index. Sie können den Python Package Index durchsuchen, indem Sie ihn in Ihrem Webbrowser aufrufen.

pip hat eine Reihe von Unterbefehlen: "install", "uninstall", "freeze" usw. (Konsultieren Sie den Leitfaden Installieren von Python-Modulen für die vollständige Dokumentation zu pip.)

Sie können die neueste Version eines Pakets installieren, indem Sie den Namen des Pakets angeben

(tutorial-env) $ python -m pip install novas
Collecting novas
  Downloading novas-3.1.1.3.tar.gz (136kB)
Installing collected packages: novas
  Running setup.py install for novas
Successfully installed novas-3.1.1.3

Sie können auch eine bestimmte Version eines Pakets installieren, indem Sie den Paketnamen gefolgt von == und der Versionsnummer angeben

(tutorial-env) $ python -m pip install requests==2.6.0
Collecting requests==2.6.0
  Using cached requests-2.6.0-py2.py3-none-any.whl
Installing collected packages: requests
Successfully installed requests-2.6.0

Wenn Sie diesen Befehl erneut ausführen, stellt pip fest, dass die angeforderte Version bereits installiert ist, und tut nichts. Sie können eine andere Versionsnummer angeben, um diese Version zu erhalten, oder Sie können python -m pip install --upgrade ausführen, um das Paket auf die neueste Version zu aktualisieren.

(tutorial-env) $ python -m pip install --upgrade requests
Collecting requests
Installing collected packages: requests
  Found existing installation: requests 2.6.0
    Uninstalling requests-2.6.0:
      Successfully uninstalled requests-2.6.0
Successfully installed requests-2.7.0

python -m pip uninstall gefolgt von einem oder mehreren Paketnamen entfernt die Pakete aus der virtuellen Umgebung.

python -m pip show zeigt Informationen zu einem bestimmten Paket an

(tutorial-env) $ python -m pip show requests
---
Metadata-Version: 2.0
Name: requests
Version: 2.7.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: me@kennethreitz.com
License: Apache 2.0
Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packages
Requires:

python -m pip list zeigt alle in der virtuellen Umgebung installierten Pakete an

(tutorial-env) $ python -m pip list
novas (3.1.1.3)
numpy (1.9.2)
pip (7.0.3)
requests (2.7.0)
setuptools (16.0)

python -m pip freeze erzeugt eine ähnliche Liste der installierten Pakete, aber die Ausgabe verwendet das Format, das python -m pip install erwartet. Eine gängige Konvention ist, diese Liste in eine Datei namens requirements.txt zu schreiben.

(tutorial-env) $ python -m pip freeze > requirements.txt
(tutorial-env) $ cat requirements.txt
novas==3.1.1.3
numpy==1.9.2
requests==2.7.0

Die Datei requirements.txt kann dann in die Versionskontrolle eingecheckt und als Teil einer Anwendung ausgeliefert werden. Benutzer können dann alle notwendigen Pakete mit install -r installieren.

(tutorial-env) $ python -m pip install -r requirements.txt
Collecting novas==3.1.1.3 (from -r requirements.txt (line 1))
  ...
Collecting numpy==1.9.2 (from -r requirements.txt (line 2))
  ...
Collecting requests==2.7.0 (from -r requirements.txt (line 3))
  ...
Installing collected packages: novas, numpy, requests
  Running setup.py install for novas
Successfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0

pip hat viele weitere Optionen. Konsultieren Sie den Leitfaden Installieren von Python-Modulen für die vollständige Dokumentation zu pip. Wenn Sie ein Paket geschrieben haben und es im Python Package Index verfügbar machen möchten, konsultieren Sie den Python Packaging User Guide.