Wann wäre die Option -e
oder --editable
nützlich pip install
?
Bei einigen Projekten lautet die letzte Zeile in der Datei "resources.txt" -e .
. Was macht es genau?
Antworten:
Wie die Manpage es sagt:
-e,--editable <path/url>
Install a project in editable mode (i.e. setuptools "develop mode") from a local project path or a VCS url.
Sie würden dies also verwenden, wenn Sie versuchen, ein Paket lokal zu installieren, meistens, wenn Sie es auf Ihrem System entwickeln. Das Paket wird lediglich mit dem ursprünglichen Speicherort verknüpft, was bedeutet, dass Änderungen am ursprünglichen Paket direkt in Ihrer Umgebung angezeigt werden.
Einige Nuggets hier und hier gleich .
-e .
. Wird es ein Paket aus setup.py in Site-Paketen editierbar machen? Entschuldigung, brauche vielleicht ein Beispiel.
-e
option ( pip install -e mypackage
) installieren und in Ihrer Umgebung verwenden (z. B. in einem anderen Projekt wie from mypackage import custom_function
), können Sie custom_function
diese aktualisierte Version verwenden, ohne sie erneut zu installieren , wenn Sie Änderungen an Ihrem vornehmen wieder (mit pip install
oder python setup.py
), was passieren würde, wenn die -e
Flagge weggelassen wird.
pip install -r requirements.txt
, werden alle erforderlichen Pakete installiert, und dann (falls vorhanden -e .
) sollte das aktuelle Paket im Entwicklungsmodus installiert werden (z. B. befinden Sie sich im mypackage
Ordner und es entspricht der Ausführung pip install -e .
, sodass sich jede Änderung mypackage
direkt in Ihrer Umgebung widerspiegelt ). Keine anderen Pakete sind davon betroffen.
Vom Arbeiten im "Entwicklungs" -Modus :
Obwohl nicht erforderlich, ist es üblich, Ihr Projekt lokal im "bearbeitbaren" oder "Entwicklungs" -Modus zu installieren, während Sie daran arbeiten. Auf diese Weise kann Ihr Projekt sowohl in Projektform installiert als auch bearbeitet werden.
Angenommen, Sie befinden sich im Stammverzeichnis Ihres Projektverzeichnisses, und führen Sie dann Folgendes aus:
pip install -e .
Obwohl etwas kryptisch,
-e
ist die Abkürzung für--editable
und.
bezieht sich auf das aktuelle Arbeitsverzeichnis. Zusammen bedeutet dies, dass das aktuelle Verzeichnis (dh Ihr Projekt) im bearbeitbaren Modus installiert wird.
Einige zusätzliche Einblicke in die Interna von Setuptools und Distutils aus dem „Entwicklungsmodus“ :
Unter normalen Umständen wird
distutils
davon ausgegangen, dass Sie eine Distribution Ihres Projekts erstellen und nicht in der Form "roh" oder "nicht erstellt" verwenden. Wenn Siedistutils
diese Methode verwenden würden, müssten Sie Ihr Projekt jedes Mal neu erstellen und installieren, wenn Sie während der Entwicklung Änderungen daran vorgenommen haben.Ein weiteres Problem, das manchmal auftritt,
distutils
besteht darin, dass Sie möglicherweise zwei verwandte Projekte gleichzeitig entwickeln müssen. Möglicherweise müssen Sie die Pakete beider Projekte im selben Verzeichnis ablegen, um sie auszuführen, sie müssen jedoch zur Revisionskontrolle getrennt bleiben. Wie kannst du das tun?Mit Setuptools können Sie Ihre Projekte zur Verwendung in einem gemeinsamen Verzeichnis oder Staging-Bereich bereitstellen, ohne jedoch Dateien zu kopieren. Auf diese Weise können Sie den Code jedes Projekts in seinem Checkout-Verzeichnis bearbeiten und müssen nur Build-Befehle ausführen, wenn Sie die C-Erweiterungen eines Projekts oder ähnlich kompilierte Dateien ändern. Sie können ein Projekt sogar im Checkout-Verzeichnis eines anderen Projekts bereitstellen, wenn dies Ihre bevorzugte Arbeitsweise ist (im Gegensatz zur Verwendung eines gemeinsamen unabhängigen Staging-Bereichs oder des Site-Packages-Verzeichnisses).
Verwenden Sie dazu den
setup.py develop
Befehl. Es funktioniert sehr ähnlich wiesetup.py install
, außer dass es eigentlich nichts installiert. Stattdessen wird.egg-link
im Bereitstellungsverzeichnis eine spezielle Datei erstellt , die mit dem Quellcode Ihres Projekts verknüpft ist. Wenn es sich bei Ihrem Bereitstellungsverzeichnis um das Python-site-packages
Verzeichnis handelt, wird dieeasy-install.pth
Datei auch so aktualisiert , dass sie den Quellcode Ihres Projekts enthält, sodass siesys.path
für alle Programme verfügbar ist , die diese Python-Installation verwenden.
Es ist wichtig zu beachten, dass ein Modul, mit dem installiert wurde , nicht deinstalliert werden pip uninstall
kann . Wenn Sie diesen Weg gehen, sollten Sie darauf vorbereitet sein, dass die Dinge sehr chaotisch werden, wenn Sie jemals deinstallieren müssen. Eine Teillösung besteht darin, (1) neu zu installieren, die erstellten Dateien wie in aufzuzeichnen und (2) alle aufgelisteten Dateien manuell zu löschen, wie z. B. (für Release 0.1a2 des Moduls tdc7201). Dies räumt jedoch nicht alles zu 100% auf; Selbst nachdem Sie dies getan haben, kann der Import der (entfernten!) lokalen Bibliothek erfolgreich sein, und der Versuch, dieselbe Version von einem Remote-Server zu installieren, schlägt möglicherweise fehl (da er der Meinung ist, dass Ihre (gelöschte!) lokale Version bereits funktioniert Datum). pip install -e
sudo python3 -m setup.py install --record installed_files.txt
sudo rm -r /usr/local/lib/python3.7/dist-packages/tdc7201-0.1a2-py3.7.egg/
Konkretes Beispiel für die Verwendung --editable
in der Entwicklung
Wenn ich mit diesem Testpaket spiele wie in:
cd ~
git clone https://github.com/cirosantilli/vcdvcd
cd vcdvcd
git checkout 5dd4205c37ed0244ecaf443d8106fadb2f9cfbb8
python -m pip install --editable . --user
es gibt aus:
Obtaining file:///home/ciro/bak/git/vcdvcd
Installing collected packages: vcdvcd
Attempting uninstall: vcdvcd
Found existing installation: vcdvcd 1.0.6
Can't uninstall 'vcdvcd'. No files were found to uninstall.
Running setup.py develop for vcdvcd
Successfully installed vcdvcd-1.0.6
Das Can't uninstall 'vcdvcd'
ist normal: Es wurde versucht, vorhandene Dateien zu deinstallieren vcdvcd
, um sie dann durch den "Symlink-ähnlichen Mechanismus" zu ersetzen, der in den folgenden Schritten erstellt wird. Dies ist jedoch fehlgeschlagen, da keine vorherigen Installationen vorhanden waren.
Dann wird eine Datei generiert:
~/.local/lib/python3.8/site-packages/vcdvcd.egg-link
was beinhaltet:
/home/ciro/vcdvcd
.
und fungiert als "Symlink" zum Python-Interpreter.
Wenn ich nun Änderungen am Git-Quellcode unter vornehme, werden /home/ciro/vcdvcd
automatisch Importeure angezeigt, die aus jedem Verzeichnis Folgendes tun können:
python -c 'import vcdvcd'
Beachten Sie jedoch, dass pip
zumindest in meiner Version mit installierte Binärdateien --editable
, wie z. B. das vcdcat
von diesem Paket über scripts=
on bereitgestellte Skript setup.py
, keine Symlinks erhalten, sondern nur kopiert werden nach:
~/.local/bin/vcdcat
Genau wie bei regulären Installationen wirken sich Aktualisierungen des Git-Repositorys daher nicht direkt auf sie aus.
Zum Vergleich: Eine reguläre --editable
Nichtinstallation von der Git-Quelle:
python -m pip uninstall vcdvcd
python -m pip install --user .
erstellt eine Kopie der installierten Dateien unter:
~/.local/lib/python3.8/site-packages/vcdvcd
Für die Deinstallation eines bearbeitbaren Pakets wie oben beschrieben ist ein ausreichend neuer Pip erforderlich, wie unter: So deinstallieren Sie bearbeitbare Pakete mit pip (installiert mit -e)
Getestet in Python 3.8, Pip 20.0.2, Ubuntu 20.04.
Empfehlung: Entwickeln Sie, wann immer möglich, direkt im Baum
Das bearbeitbare Setup ist nützlich, wenn Sie Ihren Patch für ein Paket über ein anderes Projekt testen.
Wenn Sie Ihre Änderung jedoch vollständig im Baum testen können, tun Sie dies einfach, anstatt eine bearbeitbare Installation zu generieren, die komplexer ist.
Zum Beispiel ist das obige vcdvcd-Paket so eingerichtet, dass Sie es einfach cd
in die Quelle einfügen können , ./vcdcat
ohne das Paket selbst per Pip installieren zu müssen (im Allgemeinen müssen Sie möglicherweise Abhängigkeiten von installieren requirements.txt
) und das import vcdvcd
, was diese ausführbare Datei tut (oder möglicherweise Ihre eigener benutzerdefinierter Test) findet das Paket nur korrekt in demselben Verzeichnis, in dem es sich befindet.
pip install -e
läuftsetup.py develop
.