Python setup.py entwickeln vs installieren

335

Zwei Optionen in setup.py developund installverwirren mich. Laut dieser Sitedevelop erstellt using einen speziellen Link zum Verzeichnis site-packages.

Die Leute haben vorgeschlagen, dass ich python setup.py installfür eine Neuinstallation und python setup.py developnach Änderungen an der Setup-Datei verwenden.

Kann jemand etwas Licht in die Verwendung dieser Befehle bringen?

Netro
quelle

Antworten:

468

python setup.py install wird verwendet, um Pakete (normalerweise von Drittanbietern) zu installieren, die Sie nicht selbst entwickeln / ändern / debuggen werden.

Für Ihre eigenen Aufgaben möchten Sie zuerst Ihr Paket installieren und dann den Code häufig bearbeiten können, ohne das Paket jedes Mal neu installieren zu müssen - und genau das python setup.py developtut es: Es installiert das Paket (normalerweise nur einen Quellordner). Auf eine Weise, die es Ihnen ermöglicht, Ihren Code nach der Installation in der (virtuellen) Umgebung bequem zu bearbeiten und die Änderungen sofort wirksam werden zu lassen.

Beachten Sie, dass die pip install .Installation (Installation) und pip install -e .(Entwicklerinstallation) zum Installieren von Paketen dringend empfohlen wird , da das setup.pydirekte Aufrufen für viele Abhängigkeiten, z. B. Pull-Vorabversionen und inkompatible Paketversionen, die falschen Dinge bewirkt oder die Deinstallation des Pakets erschwert pip.

Erik Kaplun
quelle
81
Erik hat recht. Es ist auch nützlich zu wissen, dass es setup.py developeine --uninstallOption gibt, wenn Sie mit dem Hacken fertig sind.
Philadams
5
Der letzte Gedanke hier ist, dass eine andere Option setup.py developbeim Hacken eines Python-Pakets darin besteht, "einfache (aber explizite)
Pfadänderungen
4
Ich hatte Probleme beim python setup.py developVersuch, Ceilometer für die lokale Entwicklung einzurichten. pip install -e PATHAm Ende habe ich (innerhalb einer virtuellen Umgebung) verwendet, um Problemeeasy_install zu vermeiden , die über aufgetreten sind .
Joe D'Andrea
1
Ich bin mir nicht sicher, ob dies wichtig ist, aber wenn ich Python 3 usw. verwende, muss man dann python setup.py developanders laufen ?
Charlie Parker
1
Es funktioniert mit Python3, aber vergessen Sie nicht, die aktuelle Pip-Installation zu entfernen, da diese möglicherweise zusammenstößt (das ist mir im Moment passiert).
Léo Germond
124

Aus der Dokumentation . Das developPaket wird nicht installiert, es wird jedoch ein .egg-linkim Bereitstellungsverzeichnis zurück zum Projektquellcodeverzeichnis erstellt.

Es ist also wie beim Installieren, aber anstatt zu kopieren, site-packageswird ein symbolischer Link hinzugefügt (der .egg-linkfungiert als symbolischer Link für mehrere Plattformen).

Auf diese Weise können Sie den Quellcode bearbeiten und die Änderungen direkt anzeigen, ohne sie jedes Mal neu installieren zu müssen, wenn Sie eine kleine Änderung vornehmen. Dies ist nützlich, wenn Sie der Entwickler dieses Projekts sind, daher der Name develop. Wenn Sie nur das Paket eines anderen installieren, sollten Sie es verwendeninstall

RubenLaguna
quelle
24

Eine andere Sache, die Leute nützlich finden können, wenn sie die developMethode verwenden, ist die --userOption, ohne sudo zu installieren. Ex:

python setup.py develop --user

anstatt

sudo python setup.py develop
Taylor
quelle
11
IIUC sollten Sie nie setup.py developin Ihrem System, dies macht nur in einer virtuellen Umgebung Sinn.
Dividebyzero
2
@dividebyzero Meinst du, man sollte immer verwenden python setup.py develop --user, wenn ich richtig verstehe? Könnten Sie mir bitte sagen, wo das Paket mithilfe von installiert ist python setup.py develop --user? Vielen Dank!
ROBOT AI
2
Ich denke, das --userwird in einem Verzeichnis in Ihrem Home-Konto installiert und hat keine Auswirkungen auf andere Benutzer in Ihrem System. Das developwird Link zu Ihrem Projekt Quellverzeichnis machen , anstatt wirklich alles zu kopieren. develop --usersollte in Ordnung sein, und auch developin einer virtuellen Umgebung. Nur developauf das eigentliche System ist seltsam, weil Sie möglicherweise andere Benutzer haben, die etwas verwenden, das auf das Projekt in Ihrer persönlichen Kopie des Projektquellcodes verweist.
Dividebyzero
4
Viele (die meisten?) Leute laufen jedoch nicht auf Mehrbenutzersystemen
patstew
1
@boatcoder, Mac und Linux (und Windows) sind möglicherweise Mehrbenutzer- fähige Systeme, aber höchstwahrscheinlich ist der Entwickler das einzige (echte) Benutzerkonto seines Desktops, und ich glaube, das hat pastew gemeint.
MestreLion