Editable Installs¶
Editable Installs sind ein Installationsmodus für Python-Pakete, der die Paketentwicklung erleichtern soll. Wenn ein Paket im bearbeitbaren Modus installiert wird, werden Änderungen am Quellcode des Projekts ohne einen neuen Installationsschritt wirksam. Editable Installs sind eine Build-Backend-unabhängige Formalisierung des von setuptools eingeführten Entwicklungsmodus.
Während die meisten Python-Build-Backends den Entwicklungsmodus oder Editable Installs auf reine Python-Komponenten anwenden, erweitert meson-python Editable Installs auf Paketkomponenten, die einen Kompilierungsschritt erfordern, wie z. B. Erweiterungsmodule.
Um ein Paket im bearbeitbaren Modus zu installieren, übergeben Sie die Option --editable oder -e an pip install. Der bearbeitbare Installationsmodus impliziert, dass der Quellcode des zu installierenden Projekts in einem lokalen Verzeichnis verfügbar ist. Um das Projekt im aktuellen Verzeichnis im bearbeitbaren Modus zu installieren, installieren Sie die Build-Abhängigkeiten des Projekts in Ihrer Entwicklungsumgebung und führen Sie aus
$ python -m pip install --no-build-isolation --editable .
Dies installiert einen Stub im Python-Site-Packages-Verzeichnis, der den Paketinhalt aus den Quellen und dem Build-Verzeichnis lädt. Derselbe Stub ist dafür verantwortlich, die kompilierten Teile des Pakets neu zu erstellen, wenn das Paket zum ersten Mal in einer bestimmten Python-Interpreter-Instanz importiert wird. Aufgrund der sehr schnellen Teil-Neuerstellungen, die von Meson und ninja ermöglicht werden, hat die Neuerstellung fast keine spürbaren Auswirkungen auf die Importzeiten.
Bitte beachten Sie, dass einige Arten von Änderungen, wie z. B. das Hinzufügen oder Ändern von Einstiegspunkten, oder das Hinzufügen neuer Abhängigkeiten und im Allgemeinen alle Änderungen, die Metadaten des Pakets betreffen, einen neuen Installationsschritt erfordern, um wirksam zu werden.
Eine bearbeitbare Installation macht mindestens alle Dateien verfügbar, die in einer regulären Installation verfügbar wären. Abhängig von der Datei- und Verzeichnisorganisation Ihres Projekts können jedoch auch Dateien verfügbar gemacht werden, die normalerweise nicht verfügbar wären.
Build-Abhängigkeiten¶
Da Pakete, die im bearbeitbaren Modus installiert werden, beim Import neu erstellt werden, müssen alle Build-Abhängigkeiten zur Laufzeit in der Entwicklungsumgebung verfügbar sein.
Standardmäßig erstellt pip Pakete in einer isolierten Umgebung, in der Build-Abhängigkeiten installiert werden, ohne die Benutzerumgebung zu beeinträchtigen. Pakete, die im bearbeitbaren Modus mit Build-Isolierung installiert werden, können beim Import nicht neu erstellt werden, es sei denn, die Build-Abhängigkeiten sind auch in der Entwicklungsumgebung installiert. Darüber hinaus würde ein Paket, das auf Header oder andere Ressourcen seiner Build-Abhängigkeiten angewiesen ist, den Pfad zu diesen in der isolierten Build-Umgebung auflösen, wenn es mit Build-Isolierung erstellt wird. Die isolierte Build-Umgebung wird nach Abschluss des Builds gelöscht, was zu Fehlern führt, wenn das Paket beim Import neu erstellt wird. Aus diesen Gründen wird bei der Installation von Paketen im bearbeitbaren Modus empfohlen, die Build-Isolierung zu deaktivieren, indem das Argument --no-build-isolation an pip übergeben wird.
Zum Zeitpunkt des Schreibens bietet pip keinen Befehl zum Installieren der Build-Abhängigkeiten für ein Paket. Die Build-Abhängigkeitsanforderungen können durch Überprüfung von pyproject.toml für das zu installierende Paket ermittelt werden. Dazu gehören mindestens das Python-Paket meson-python sowie die Python-Pakete meson und ninja, falls die entsprechenden Befehle nicht vom System bereitgestellt werden oder nicht die erforderliche Version haben.
$ python -m pip install meson-python meson ninja
Build-Verzeichnis¶
Da die kompilierten Komponenten des Pakets direkt aus dem Build-Verzeichnis geladen werden, muss das Build-Verzeichnis zur Laufzeit neben dem Quellverzeichnis verfügbar sein.
Beim Erstellen eines Pakets im bearbeitbaren Modus verwendet meson-python ein Build-Verzeichnis, das nach dem Wheel-ABI-Tag benannt ist, der dem Interpreter zugeordnet ist, für den das Paket erstellt wird. Das Build-Verzeichnis wird in einem Verzeichnis namens build innerhalb des Quellbaums platziert. Zum Beispiel wird eine bearbeitbare Installation für CPython 3.11 einem Build-Verzeichnis build/cp311/ zugeordnet. Diese Verzeichnisstruktur ermöglicht die Installation desselben Projekts im bearbeitbaren Modus für mehrere Interpreter mit unterschiedlichen ABIs.
Ein alternatives Build-Verzeichnis kann mit der Konfigurationseinstellung build-dir angegeben werden.
Verbose-Modus¶
Da Editable Installs hauptsächlich ein Hilfsmittel für die Paketentwicklung sind, kann es oft nützlich sein, die Kompilierungsprotokolle zu überprüfen. Durch Setzen der Umgebungsvariablen MESONPY_EDITABLE_VERBOSE wird die Ausgabe des Build-Prozesses ausgegeben, wenn ein Paket beim Import neu erstellt wird. Um diesen ausführlichen Modus dauerhaft für ein Paket zu aktivieren, kann die Konfigurationseinstellung editable-verbose beim Installieren des Pakets auf einen nicht-null Wert gesetzt werden.
$ python -m pip install --no-build-isolation --config-settings=editable-verbose=true --editable .