Python: Wie bearbeite ich ein installiertes Paket?

69

Ich habe ein Paket über installiert pip install something. Ich möchte den Quellcode für das Paket bearbeiten something. Wo ist es (unter Ubuntu 12.04) und wie lade ich es jedes Mal neu, wenn ich den Quellcode bearbeite und ausführe?

Derzeit bearbeite ich den Quellcode und führe dann immer wieder python setup.py aus, was sich als ziemlich mühsam herausstellt.

KJW
quelle
dpkg-query -L <package_name>dann Dateien bearbeiten?
Deepak Ingole
1
Ubuntu Generic (und ich erwarte auch neuere Versionen) installiert Pip-Pakete in /usr/local/lib/python2.7/dist-packages und apt-Pakete in /usr/lib/python2.7/dist-packages
Brij Raj Singh - MSFT

Antworten:

87

Sie sollten niemals ein installiertes Paket bearbeiten. Installieren Sie stattdessen eine gegabelte Version des Pakets.

Wenn Sie den Code häufig bearbeiten müssen, installieren Sie das Paket NICHT über pip install somethingund bearbeiten Sie den Code in '... / site_packages / ...'.

Legen Sie stattdessen den Quellcode in ein Entwicklungsverzeichnis und installieren Sie ihn mit

python setup.py develop
# or
pip install -e path/to/SomePackage
# Or use a vcs at the first place
$ pip install -e git+https://github.com/lakshmivyas/hyde.git#egg=hyde

Stellen Sie Ihre Änderungen in ein Versionskontrollsystem und weisen Sie pip an, es explizit zu installieren.

Referenz: Bearbeitungsmodus

Leonardo.Z
quelle
6
Ich habe es mit installiert pip install -e /path/SomePackage/. Ich navigiere in dieses Verzeichnis /src/und bearbeite eine Datei. Wenn ich jedoch SomePackagevom Terminal aus laufe, spiegelt dies diese Änderung nicht wider.
KJW
Dort befindet sich der Quellcode, er enthält die .pyDateien, die ich bearbeitet habe.
KJW
3
Sie sollten das Paket mit so etwas wie git unter Quellcodeverwaltung halten. Wenn Sie das Paket erstellen, werden alle neu erstellten Dateien mit git markiert. Anschließend können Sie Änderungen an allen Dateien außer der von Ihnen geänderten zurücksetzen. Dadurch wird pip gezwungen, von Grund auf neu zu erstellen, anstatt die Versionen von Dateien zu verwenden, die vor Ihren Änderungen kompiliert wurden.
Honi
1
Ist das Klonen des Pakets eine gute Methode oder sollten wir python setup.pyoder pip install it?
Revolucion für Monica
1
HINWEIS: Wenn Sie es verwenden python setup.py develop, werden alle Abhängigkeiten auch im Entwicklungsmodus installiert - dies ist wahrscheinlich nicht das, was Sie benötigen. Es wird viel länger dauern! Wenn Sie es jedoch verwenden pip install -e <path>, wird nur sichergestellt, dass alle Abhängigkeiten vorhanden sind, und es wird nur python setup.py developauf dem aktuellen Paket ausgeführt.
LightCC
6

Sie können die in installierten Dateien bearbeiten /usr/local/lib/python2.7/dist-packages/. Beachten Sie, dass Sie verwenden müssen sudooder werden müssen root. Die bessere Option wäre die Verwendung einer virtuellen Umgebung für Ihre Entwicklung. Anschließend können Sie die mit Ihren Berechtigungen installierten Dateien in Ihrer virtuellen Umgebung bearbeiten.

Oz123
quelle
1
Ich verwende mkvirtualenv mit der Option -no-site-packages, installiere pip und installiere something. Ich sehe jedoch nicht, wo die Datei in der virtuellen Umgebung installiert wird, die ich bearbeiten kann
KJW
9
Das ist ein schlechter Rat. Es wird dringend davon abgeraten, ein installiertes Paket direkt zu bearbeiten. Es macht Paket-Upgrade und Wartung ein Chaos. Dies macht die automatisierte Bereitstellung zu einem Chaos. Im Allgemeinen macht es Devops zu einem Chaos. In der hoch bewerteten Antwort finden Sie die richtigen Entwicklungspraktiken.
Wtower