Was bedeutet "Fehler: Option - Einzelversion-extern verwaltet nicht erkannt"?

102

Ich scheine plötzlich auf den Fehler gestoßen zu sein, error: option --single-version-externally-managed not recognizedwenn pip installich varions-Pakete (einschließlich PyObjCund astropy) verwende. Ich habe diesen Fehler noch nie gesehen, aber er wird jetzt auch in Travis-CI-Builds angezeigt, für die sich nichts geändert hat.

Zeigt dieser Fehler eine veraltete Verteilung an? Oder eine falsch angegebene Option in setup.py? Oder etwas ganz anderes?

Keflavich
quelle

Antworten:

84

Neues Update:

Installieren Sie die neueste Version von setuptools. Wenn der Fehler weiterhin auftritt, installieren Sie ihn wheelebenfalls.

pip install -U setuptools
pip install -U wheel

Originalantwort / Weitere Details:

--single-version-externally-managed ist eine Option, die für Python-Pakete verwendet wird, die das setuptools-Modul anweisen, ein Python-Paket zu erstellen, das bei Bedarf vom Paketmanager des Hosts wie Yum oder Apt einfach verwaltet werden kann.

Wenn diese Meldung angezeigt wird, verfügen Sie möglicherweise über eine alte Version von setuptools oder Python. Versuchen Sie es mit Distribute, einer neueren Version von setuptools, die abwärtskompatibel ist. Diese Pakete können erwarten, dass Sie es bereits haben.

https://pypi.python.org/pypi/distribute

Bearbeiten: Zu diesem Zeitpunkt wurde Distribute in das Hauptprojekt integriert setuptools. Installieren Sie einfach die neueste Version von setuptools. Wie @wynemo angedeutet hat, möchten Sie möglicherweise --eggstattdessen die Option verwenden, da sie besser für manuelle Installationen geeignet ist, bei denen Sie nicht beabsichtigen, ein Systempaket für die Verteilung zu erstellen.

Kelketek
quelle
1
Können Sie hinzufügen, in welcher Version angezeigt wurde? Ich benutze setuptools 0.6 und pip kennt keine neuere Version. distributeklingt richtig, aber ich kann es nicht importieren ...
keflavich
Das tust du nicht import distribute. Distribute ist ein Drop-In-Ersatz und hat denselben Modulnamen. import setuptoolswird auch dafür benötigt.
Kelketek
Sie müssen also sicherstellen, dass setuptools die Verteilung nicht überschreibt, wenn Sie beide installiert haben. Sie sollten Distribute mit Pip installieren und dann setuptools entfernen. Ich stelle mir vor, das sollte funktionieren.
Kelketek
17
Es sollte hinzugefügt werden: Verwenden Sie nicht mehr verteilen. Distribute wurde wieder in das setuptools-Projekt integriert, sodass es jetzt nur noch eine gibt setuptools, die alle regiert.
Iguananaut
1
@johntx, diese Antwort wurde vor über einem Jahr gegeben, als Distribute und Setuptools noch nicht zusammengeführt waren (oder wenn ja, hatte ich noch nichts davon gehört). Ich habe es jetzt aktualisiert.
Kelketek
136

--eggOption hinzufügen

pip install --egg SCons

Ich benutze pipVersion 1.4.1

Wynemo
quelle
10
Das war die einzige Lösung, die tatsächlich geholfen hat. Neuere Pip- und Setuptools wurden bereits installiert, trotzdem habe ich diesen Fehler.
Michael
Ich hatte dieses Problem mit Pyenv und das hat es behoben.
Glaukon
13
Kann jemand im Detail erklären, was diese Option bedeutet und warum dies funktioniert?
Kawing-Chiu
4
Während dies für mich funktionierte, bekam ich auch den Fehler: "DEPRECATION: --egg ist veraltet und wird in Zukunft entfernt. Dieses Flag schließt sich bei großen Teilen von pip gegenseitig aus und macht die Fähigkeit von pip, das zu verwalten, ungültig Installationsprozess."
Natersoz
2
no such option: --eggin pip 18.1
gdw2
45

Durch die Installation wurde wheeldieses Problem mit der letzten pipVersion behoben (ich habe 8.1.2 verwendet):

pip install wheel
Seth Difley
quelle
Sie können zur Bearbeitung zurückkehren, wenn Sie möchten, kein Problem. Wenn Sie die genaue Version von kennen pipund wissen, wheelwo sie behoben wurde, kann es sich lohnen, sie zu erwähnen, falls sie erneut beschädigt wird. Und auch die Antwort erklärt nicht, was sowieso los ist.
Anatoly Techtonik
Diese Plus-Antwort von @sparrowt hat mein Problem behoben
David Poxon
7

Versuchen Sie, setuptools wie folgt zu aktualisieren:

pip install --upgrade setuptools

Sperling
quelle
5

Ich hatte dieses Problem. Es stellte sich heraus, dass es ein Problem mit den Dateiberechtigungen in meinem Pip-Cache war.

Wenn Sie eine Nachricht ganz am Anfang Ihrer Pip-Ausgabe sehen, wie

The directory '/home/ubuntu/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/ubuntu/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

Sie könnten das gleiche Problem haben. Sie können das Problem beheben, indem Sie entweder sicherstellen, dass Sie über die richtigen Dateiberechtigungen für Ihren Pip-Cache verfügen (etwa chown -R $(whoami) /home/ubuntu/.cache/pip), oder wenn Sie unter UNIX arbeiten, können Sie den Speicherort des Pip-Cache mit der XDG_CACHE_HOMEenv-Variable auf einen Ordner festlegen, den Sie besitzen.

ohne
quelle
Überraschenderweise hat es auch bei mir funktioniert (wenn Sie sudodas Paket installieren, müssen Sie das -HFlag hinzufügen )! Ich sehe wirklich nicht, was die Verbindung zwischen dem Cache und dem Befehlsoptionsfehler ist, aber egal.
Delgan
1

Ich habe die oben genannten Lösungen ausprobiert. Ich kann das Problem jedoch nur lösen, bis ich Folgendes tue:

sudo pip3 install -U pip (für Python3)

Karim
quelle
0

Ich habe dieses Problem auf meinem MacBook auch, wenn ich versuche, ein Python-Paket zu aktualisieren. Ich überprüfe die Pip-Version in OS X, sie ist zu alt: 1.1. Ich verwende follow cmd, um pip auf 1.5.6 zu aktualisieren

easy_install -U pip

Dann ist dieser Fehler behoben.

NewPtone
quelle