[PYTHON] Was tun, wenn pip in Homebrew einen DistributionError ausgibt?

Phänomen

Wenn ich den Befehl pip ausführe, erhalte ich eine Fehlermeldung wie "pkg_resources.DistributionNotFound: pip == 1.5.4" und kann nichts tun.

Reproduktionsverfahren

  1. Installieren Sie Python mit Homebrew
  2. Führen Sie mit einem neuen Pip pip install --upgrade pip aus

Brew Install Python

==> Caveats
Setuptools and Pip have been installed. To update them
  pip install --upgrade setuptools
  pip install --upgrade pip

Wenn ich den Pip jedoch auf diese Weise aktualisiere, funktioniert der Pip nicht. Der Pip wurde aktualisiert, aber / usr / local / bin / pip ist immer noch veraltet.

Bewältigung

Sie können pip mit python -m pip starten. Löschen Sie / usr / local / bin / pip

$ rm /usr/local/bin/pip /usr/local/bin/pip2 /usr/local/bin/pip2.7
$ python -m pip install --upgrade --force-reinstall pip

Oder

$ python -m pip install --upgrade --force-reinstall pip --no-use-wheel

Machen. Wenn Sie die letztere Methode verwenden, sollten Sie Ihre Pip- oder Setuptools in Zukunft aktualisieren

$ pip install --upgrade --no-use-wheel pip setuptools

müssen es tun.

Ursache

Dies ist ein Kompatibilitätsproblem zwischen Homebrew und Rad.

Homebrew verwendet bei der Installation von Python pip und setuptools

/usr/local/Cellar/python/<version>/

Installieren Sie es darunter und installieren Sie den Symlink zum Befehl pip usw. in `/ usr / local / bin /`.

Schreiben Sie dann die Einstellung prefix = / usr / local in distutils.cfg, und das Paket, das normalerweise von pip install usw. installiert wird, ist ein Skript unter/ usr / local / bin /,/ usr Stellen Sie sicher, dass die Bibliothek unter / local / lib / pytthon2.7 /installiert ist.

Wenn ich in diesem Zustand "pip install --upgrade pip" mache, möchte ich das Skript "/ usr / local / bin / pip" installieren, aber es gibt bereits einen Symlink, den Homebrew nicht erkennt. ..

Das Verhalten, wenn sich Symlink bereits an der Stelle befindet, an der Sie das Skript installieren möchten, unterscheidet sich jedoch zwischen der Installation von Rad und der Installation von Tar.gz. Im Fall von Rad kann es nicht installiert werden und es wird übersprungen, und im Fall von Tar.gz Schreibt das Link-Ziel von symlink (dh den Inhalt von Cellar) neu.

Moderne Pips verwenden standardmäßig das Rad, wodurch Symlinks für Skripte verbleiben, die versuchen, ältere Versionen von Pips unter Cellar zu verwenden, sodass sie nicht mehr gestartet werden können.

Ich finde es nicht gut, dass das Verhalten bei der Verwendung von Wheel und bei Nichtverwendung anders ist, aber da es beim Überschreiben des extern erstellten Symlinks keine richtige Antwort gibt, ist Homebrew pip install- Wenn Sie -upgrade pip zulassen, sollten Sie pip von Anfang an normal installieren.

Nachtrag

Ich habe eine Pull-Anfrage ausgegeben, die Pip und Setuptools repariert, um die Installation in Cellar zu beenden. https://github.com/Homebrew/homebrew/pull/29926

Nachtrag 2

Die oben genannte PR wurde abgelehnt, weil sie nicht der Grundrichtlinie von Homebrew entsprach. Auf die gleiche Weise wie bei der Installation mit Wheel, wie im Fall der Nichtverwendung von Wheel, ist PR die Änderung zum Überschreiben (Verbindungsziel), auch wenn die symbolische Verknüpfung bereits mit dem Installationsziel des Skripts übereinstimmt, PR für die Pip-Seite und früher Es wurde gefangen genommen.

Sobald der nächste Pip (1.6.0) veröffentlicht und mit Homebrews Python gebündelt ist, sollten Sie in der Lage sein, ein normales Upgrade mit "pip install --upgrade pip" von der nächsten Version durchzuführen.

Das heißt, es gibt zwei Pips innerhalb und außerhalb des Celler, und das Skript im Inneren wird bei der Installation außerhalb neu geschrieben, was alles andere als intelligent ist. Sofern Sie keine besonderen Probleme haben, empfehlen wir, dass Sie Ihr Pip nicht aktualisieren und auf das Update von Homebrew warten.

Starke Python-Entwickler ziehen es möglicherweise vor, ihre eigenen mit MacPorts oder pyenv zu erstellen, anstatt Homebrew, das durch seine eigene Methode erzwungen wird. pip install --upgrade pip wurde behoben, aber pip install --user ipython usw. funktioniert immer noch nicht und ich weiß nicht, welche anderen Nebenwirkungen es beim Verpacken gibt.

Recommended Posts

Was tun, wenn pip in Homebrew einen DistributionError ausgibt?
Was tun, wenn in pip ein Unicode-Dekodierungsfehler auftritt?
Was tun, wenn die Pip-Installation in Xcode 5.1 fehlschlägt?
Was tun, wenn in tf.train.start_queue_runners () ein 0xC0000005-Fehler auftritt?
Was tun, wenn in Python minus Null angezeigt wird?
Was tun, wenn bei der Pip-Installation ein Unicode-Dekodierungsfehler auftritt?
Was tun, wenn pipreqs zu UnicodeDecodeError führt?
Was tun, wenn pip nicht installiert werden kann?
Was tun, wenn in python json .dumps eine Dezimalstelle enthalten ist?
Was tun, wenn Sie nicht mit pip in einer Babun-Umgebung installieren können?
Was tun, wenn eine Warnmeldung in der Pip-Liste angezeigt wird?
Was tun, wenn pip --user in einer mit pyenv erstellten virtuellen Umgebung einen Fehler zurückgibt?
Was tun, wenn Sie mysqlclient nicht per Pip installieren können?
Was tun, wenn bei der Installation von pip abhängige Bibliotheken nicht installiert werden können?
Was tun, wenn auf pipenv der Fehler "Keine Versionen gefunden" angezeigt wird?
Was tun, wenn in Sublime Text Python ein Unicode-Codierungsfehler auftritt?
Was tun, wenn NotADirectoryError: [Errno 20] Kein Verzeichnis: 'xdg-settings' wird im Jupyter-Notizbuch angezeigt
Was tun, wenn im Selenium Chrome-Treiber ein Versionsfehler auftritt?
Was tun, wenn Yum kaputt geht?
Was tun, wenn `Argumente [0] .scrollIntoView ();` in Python-Selen fehlschlägt?
Was tun, wenn Overalls "Abdeckung unbekannt" werden?
Was tun, wenn `pip install matplot lib` auf dem Mac fehlschlägt?
Was tun, wenn Sie sich nicht als root anmelden können?
Was tun, wenn die Installation von pip mysqlclient unter MacOS fehlschlägt?
Was tun, wenn bei yum ein Metalink für Repository-Fehler nicht abgerufen werden kann?
Was tun, wenn Sie pyaudio nicht mit pip #Python installieren können?
Was tun, wenn "Unbenannt: 0" in_csv-> read_csv von Pandas hinzugefügt wird?
Was tun, wenn Sie den Papierkorb in Lubuntu 18.04 nicht verwenden können?
Was zu tun ist, wenn Sie sich über "Umkehrungen" ärgern, muss eine 2D-Liste sein ... im matplotlib-Pfeil
Was tun, wenn beim Versuch, model.save mit Keras zu modellieren, der Fehler "get_config" überschrieben werden muss?
[Memorandum] Was tun, wenn nach dem Ausführen der Pip-Liste eine Warnung angezeigt wird?
Was tun, wenn PDO nicht in Laravel oder CakePHP gefunden wird?
Was tun, wenn Sie die Rastersuche von sklearn in Python nicht verwenden können?
Was tun, wenn Sie sich mit FileNotFoundError in der Dateireferenz verlieren?
Was tun, wenn Sie sich über TensorFlow v2 ohne Attribut 'app' ärgern?
Was tun, wenn in pydoc keine Python-Dokumentation für ... gefunden wird?
Was tun, wenn TypeError in min und max von numpy auftritt?
Was tun, wenn Sie URL 443 mit pip nicht abrufen konnten?
Was passiert, wenn Sie in Python "A, B als C importieren"?
[OSX] [pyenv] Was tun, wenn in pip ein SSL-Fehler auftritt?
Was tun, wenn die Pipenv-Shell nicht mehr möglich ist?
Was tun, wenn mod_fcgid UnicodeEncodeError nicht auflösen kann?
Was tun, wenn die Schienen nicht funktionieren?
Was tun, wenn PyInstaller3.5 einen Fehler in Python3.8 verursacht (TypeError: Eine Ganzzahl ist erforderlich (Typbytes erhalten))
Was tun, wenn die Autocomplete-Python von Atom nicht funktioniert?
Was tun, um eine Google-Tabelle in Python zu erhalten?
Was tun, wenn die Docker-Synchronisierung plötzlich nicht mehr funktioniert?
Was tun, wenn beim Importieren von Lebensläufen ein symbolischer Linkfehler auftritt, während versucht wird, OpenCV in Python zu installieren?
Was tun, wenn ein SSL-Fehler mit pip in einer Windows10-, Miniconda- oder VScode-Umgebung auftritt?
Was tun, wenn eine Warnung zur Python-Integration in Neovims CheckHealth angezeigt wird?
Was tun, wenn Scrapy nach der Installation von Scrapy mit Pip auf dem Mac nicht funktioniert?
Lösung, wenn Django keine Bilder aus einem statischen Ordner laden kann
Was tun, wenn "Python nicht konfiguriert" angezeigt wird? Verwenden von PyDev in Eclipse
Was tun, wenn bei der Eingabe eines Kameravideos in OpenCV ein Abbruch angezeigt wird?
Was tun, wenn beim Versuch, eine Nachricht in task.loop () unmittelbar nach dem Start zu senden, eine Fehlermeldung angezeigt wird?
ModuleNotFoundError: Kein Modul Was tun, wenn Sie'tensorflow.contrib 'erhalten?