"Pip install --editable ./" vs "python setup.py Develop"


177

Gibt es einen signifikanten Unterschied zwischen

pip install -e /path/to/mypackage

und die setuptools variante?

python /path/to/mypackage/setup.py develop

1
Dies scheint ein aktualisierter Link zu sein, der den Entwicklungsmodus beschreibt: setuptools.readthedocs.io/en/latest/…
PaulR

Wenn Sie an einer Deinstallation interessiert sind (Pakete im Entwicklungs- / Bearbeitungsmodus
Charlie Parker

Antworten:


130

Vermeiden Sie es, setup.pydirekt anzurufen. Dadurch wird pip nicht ordnungsgemäß mitgeteilt, dass Sie Ihr Paket installiert haben.

Mit pip install -e:

Bei lokalen Projekten wird das Verzeichnis "SomeProject.egg-info" relativ zum Projektpfad erstellt. Dies ist ein Vorteil gegenüber der einfachen Verwendung setup.py develop, bei der die "Ei-Info" direkt relativ zum aktuellen Arbeitsverzeichnis erstellt wird.

Mehr: docs

Lesen Sie auch die Setuptools docs .


Muss der Benutzer 'python setup.py sdist' erneut ausführen, nachdem die Datei geändert wurde, damit die Änderung wirksam wird?
Variable

Wenn Sie jedoch die Datei setup.py selbst mit 'set_trace' debuggen müssen, ist dies mit 'python setup.py Develop' möglich
mirek

Die zweite URL ist fehlerhaft.
bad_coder

Beide arbeiten für mich.
Sobolevn

76

Ein weiterer Unterschied: pip install -everwendet das Rad, während python setup.py develop
es nicht verwendet wird.

Mit installkönnen Sie das gleiche Verhalten erzielen, indem Sie verwenden
pip install -e /path/to/package --no-use-wheel

Weitere Infos zu Rädern: Python-Räder


18
Beachten Sie, dass nach pip.pypa.io/en/stable/reference/pip_install , --no-use-wheelDEPRECATED für--no-binary :all:
Nzbuu

Können wir pip install -e für Pakete ausführen, die mit sdist erstellt wurden?
Variable

36

Ein weiterer Unterschied, der begünstigt werden kann, pip install -ebesteht darin, dass, wenn Ihr Projekt Abhängigkeiten in install_requiresin hat setup.py, pip install -e .Abhängigkeiten mit pip installiert werden, während python setup.py developmit installiert werden können easy_install, und Probleme bezüglich 'ei-info' verursachen können, wie oben erwähnt. Bei install-requiresVerwendung dependency_linksmit benutzerdefinierten Git-URLs mit angehängten Eikennungen kann dies besonders ärgerlich sein.


1
Dies erklärt völlig, warum mein privates Paket nicht installiert werden konnte. es ist auf meinem devpi server nicht pypi. Vielen Dank.
ckot

Wenn Sie sagen, dass das Paket bearbeitet werden kann, muss der Benutzer nach dem Ändern der Paketdatei erneut 'python setup.py sdist' ausführen? Oder ist es nicht erforderlich, den obigen Befehl auszuführen?
Variable

@variable Wenn Sie ein lokales Paket mit installieren pip install -e ., wird im Wesentlichen ein Symlink im entsprechenden Python-Site-Packages-Verzeichnis erstellt, der auf Ihre Arbeitskopie verweist. Wenn Codeänderungen an dieser Arbeitskopie vorgenommen werden, wird diese sofort in der "installierten" Version angezeigt, sodass Sie die Installationsbefehle nicht erneut ausführen müssen. Dies ist in erster Linie nützlich für die Entwicklung in einem Repository, das ein installierbares Paket darstellt, kann aber auch nützlich sein, um beispielsweise eine Sammlung von Modulen mit nur absoluten Importen usw. zu
schreiben

0

Ein weiterer Unterschied: Wenn Sie python setup.py developeine Version ausführen , die als Vorabversion betrachtet wird (möglicherweise, weil Sie sie von einem Git-Klon ausführen, wenn Sie eine Version nicht ausgecheckt haben), aktivieren Sie die Installation von Vorabversionen Ihrer Abhängigkeiten . Auf der anderen Seite pip install --editablemüssten Sie --preexplizit übergeben, wenn Sie diese Vorabversionen möchten.

(Sehen Sie sich das CI-Protokoll mit versehentlich verwendeten Vorabversionen an und vergleichen Sie es hier mit einem festen Build .)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.