"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
PeterE
quelle
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 .

sobolevn
quelle
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

user2488286
quelle
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.

ely
quelle
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 .)

Jan Kundrát
quelle