Pip-Installation /usr/local/opt/python/bin/python2.7: fehlerhafter Interpreter: Keine solche Datei oder kein solches Verzeichnis

88

Ich weiß nicht, was der Deal ist, aber ich bin festgefahren, wenn ich einige Stackoverflow-Lösungen befolge, die nirgendwo hinkommen. Können Sie mir bitte dabei helfen?

  Monas-MacBook-Pro:CS764 mona$ sudo python get-pip.py
    The directory '/Users/mona/Library/Caches/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 '/Users/mona/Library/Caches/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.
    /tmp/tmpbSjX8k/pip.zip/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
    Collecting pip
      Downloading pip-7.1.0-py2.py3-none-any.whl (1.1MB)
        100% |████████████████████████████████| 1.1MB 181kB/s 
    Installing collected packages: pip
      Found existing installation: pip 1.4.1
        Uninstalling pip-1.4.1:
          Successfully uninstalled pip-1.4.1
    Successfully installed pip-7.1.0
    Monas-MacBook-Pro:CS764 mona$ pip --version
    -bash: /usr/local/bin/pip: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory
Mona Jalal
quelle

Antworten:

165

Ich hatte Home-Brew verwendet, um 2.7 unter OS X 10.10 zu installieren, und bei der neuen Installation fehlten die Sym-Links. Ich rannte

brew link --overwrite python

wie unter Wie wird Python in Homebrew symlink? und es löste das Problem.

LancDec
quelle
6
Das hat mich gerettet. FWIW, ich musste drei Schritte ausführen, um mein Python auf El Capitan zu reparieren: Brew Install Python; brauen Linkapps Python; Brew Link - Python überschreiben
Saish
Wie macht man das Gegenteil davon?
Bubakazouba
2
Rückseite: Brew Unlink Python
Anders B
1
Nur um das hinzuzufügen. Ich stellte fest, dass ich "xcode-select --install" aus irgendeinem Grund ausführen musste. "Brew Reinstall Python" würde nicht funktionieren, bis ich das tat. In meinem speziellen Fall habe ich den Migrationsassistenten verwendet, um von einem physischen Computer auf den anderen zu wechseln. Nach diesen beiden Dingen wurde alles gelöst und pip3 funktionierte.
Chrisallick
Python war für mich bereits richtig verlinkt, was geholfen hat, wurde pip3 install --upgrade pipvon @Excalibur in einem Kommentar weiter unten hervorgehoben.
Retrovertigo
55

Ich vermute, Sie haben zwei Python-Installationen oder zwei Pip-Installationen, von denen eine teilweise entfernt wurde.

Warum benutzt du? sudo ? Idealerweise sollten Sie in der Lage sein, alles von Ihrem Benutzerkonto aus zu installieren und auszuführen, anstatt root zu verwenden. Wenn Sie root und Ihr lokales Konto miteinander mischen, treten mit größerer Wahrscheinlichkeit Berechtigungsprobleme auf (siehe z. B. die Warnung "Das übergeordnete Verzeichnis gehört nicht dem aktuellen Benutzer").

Was bekommen Sie, wenn Sie dies ausführen?

$ head -n1 /usr/local/bin/pip

Dies zeigt Ihnen, welche Python-Binärdatei pipverwendet werden soll. Wenn es zeigt /usr/local/opt/python/bin/python2.7, versuchen Sie Folgendes:

$ ls -al /usr/local/opt/python/bin/python2.7

Wenn hier "Keine solche Datei oder kein solches Verzeichnis" steht, versucht pip, eine Python-Binärdatei zu verwenden, die entfernt wurde.

Versuchen Sie als nächstes Folgendes:

$ which python
$ which python2.7

Um den Pfad der Python-Binärdatei zu sehen, die tatsächlich funktioniert.

Da es so aussieht, als ob pip irgendwo erfolgreich installiert wurde, könnte es sein, dass dies /usr/local/bin/pipTeil einer älteren Installation von pip ist, die weiter oben auf der PATH. Um dies zu testen, können Sie versuchen, die nicht funktionierende pipBinärdatei wie folgt aus dem Weg zu räumen (möglicherweise erforderlich sudo):

$ mv /usr/local/bin/pip /usr/local/bin/pip.old

Versuchen Sie dann pip --versionerneut , Ihren Befehl auszuführen. Hoffentlich nimmt es die richtige Version und läuft erfolgreich.

Steven Kryskalla
quelle
tolle Erklärungen. Nebenbemerkung: Das Debuggen des Paketmanagers einer Sprache, die installiert wurde, um ein Projekt aus mercurial herauszuholen, lässt mich das Vertrauen in all diese Computer-Dinge verlieren. oops .. Und jetzt zu einem neuen Python-Fehler "AttributeError local repository"
nicolas
1
Ich habe das gleiche Problem, aber das hat bei mir nicht funktioniert, selbst nachdem ich diese Anweisungen befolgt habe. PIP verwendet immer noch einen falschen Pfad. Gibt es einen anderen Weg, dies zu tun?
Adam Starrh
5
Ich musste pip installieren: sudo /usr/bin/easy_install pip- Hier gefunden: stackoverflow.com/questions/27308234/…
Adam Starrh
Das Problem ist, dass, wenn dies die einzige Version von Pip ist, die installiert ist, Sie
kein
52

Einzige Lösung in OSX und seiner Variante.

ln -s /usr/local/bin/python /usr/local/opt/python/bin/python2.7
Der Exorzist
quelle
1
Versucht, die Antwort auf nahtlose und einfache Weise zu präsentieren.
TheExorcist
Dies hat wahrscheinlich Nebenwirkungen auf andere Programme, die Python verwenden. Darüber hinaus ist das Ende der Lebensdauer von Python 2 der 1. Januar 2020. Die Entwickler haben angegeben, dass "python" ohne Modifikator (oder in einigen Umgebungen bereits) auf Python 3 python.org/dev/peps
Kotoole
@kotoole Aus Ihrer Antwort geht hervor, dass Ihre Augen sehen können, aber nicht beobachten. Ersetzen Sie einfach python2.7 durch python3.x. Es funktioniert immer noch genauso.
TheExorcist
1
@TheExorcist Leider sind Python2 und Python3 für uns alle verschiedene Sprachen. Code, der für eine Sprache geschrieben wurde, wird unterbrochen, wenn er in der anderen ausgeführt wird. Das Ersetzen von Python durch Python2.7 im Großhandel scheint sehr wahrscheinlich andere Anwendungen in der Zukunft zu beschädigen. Diese Lösung "funktioniert" genauso wie das Löschen Ihrer Haustür, wenn Sie Ihre Schlüssel vergessen haben. Es bringt dich durch, aber weine nicht, wenn sich dein Haus mit Insekten füllt.
Kotoole
@kotoole natürlich, du hast recht, aber manchmal müssen wir tun, was wir im Moment tun müssen.
TheExorcist
32

Befestigungsrohr

Für diesen Fehler:

~/Library/Python/2.7/bin/pip: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory`

Die Ursache für dieses Problem ist ein fehlerhafter Python-Pfad, der in pip fest codiert ist (was bedeutet, dass er nicht durch z. B. Ändern Ihres $ PATH behoben werden kann). Dieser Pfad ist in der neuesten Version von pip nicht mehr fest codiert. Eine Lösung, die funktionieren sollte , lautet also:

pip install --upgrade pip

Da dieser Befehl natürlich pip verwendet, schlägt er mit demselben Fehler fehl.

Der Weg, um sich aus diesem Chaos herauszuholen:

  1. Lauf which pip
  2. Öffnen Sie diese Datei in einem Texteditor
  3. Ändern Sie die erste Zeile von #!/usr/local/opt/python/bin/python2.7z. B. #!/usr/local/opt/python2/bin/python2.7(beachten Sie Python2 im Pfad) oder einen beliebigen Pfad zu einem funktionierenden Python-Interpreter auf Ihrem Computer.
  4. Nun pip install --upgrade pip(dies überschreibt Ihren Hack und bringt Pip in die neueste Version, in der das Interpreter-Problem behoben werden sollte).

Virtualenv reparieren

Für mich fand ich dieses Problem, indem ich zuerst das identische Problem von virtualenv hatte:

~/Library/Python/2.7/bin/virtualenv: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory`

Die Lösung hier ist zu laufen

pip uninstall virtualenv
pip install virtualenv

Wenn das Ausführen dieses Befehls den gleichen Fehler von pip ausgibt, siehe oben.

Kotoole
quelle
1
Ja, nachdem ich Python 2.7 und 3.6 unter Mac OSX hatte und dann auf 3.6 aktualisiert hatte, hatte ich dieses Problem. Dies war die Lösung, die für mich funktioniert hat ( pip3 install --upgrade pip)
Excalibur
Nein: pip Traceback (letzter Aufruf zuletzt): Datei "/ usr / local / bin / pip", Zeile 7, in <Modul> von pip._internal import main ImportError: Kein Modul mit dem Namen pip._internal
einarc
@Excalibur Ich habe Ihre Lösung als Kommentar unter der akzeptierten Antwort hinzugefügt. Dank dafür!
Retrovertigo
26

Ich habe den gleichen Fehler mit sudo für meine Installation gemacht. (Hoppla)

brew install python
brew linkapps python
brew link --overwrite python 

Dies brachte alles wieder normal.

DaveSaunders
quelle
21
linkapps ist veraltet
Steve
15

Da ich sowohl Python 2 als auch Python 3 unter Mac OSX installiert hatte, hatte ich alle möglichen Fehler.

Ich habe verwendet, um den Speicherort meiner python2.7-Datei zu finden (/usr/local/bin/python2.7)

which python2.7

Dann habe ich meinen realen Python2.7-Installationsort mit dem vom Skript erwarteten verknüpft:

ln -s /usr/local/bin/python2.7 /usr/local/opt/python/bin/python2.7
Simon Briggs
quelle
2
Lebensretter! Danke dir.
Brian Fegter
12

Ich hatte ein ähnliches Problem. Grundsätzlich suchte pip in einem falschen Pfad (alter Installationspfad) oder Python. Die folgende Lösung hat bei mir funktioniert:

  • Ich habe überprüft, wo sich der Python-Pfad befindet (versuchen Sie es which python )
  • Ich habe die erste Zeile in der Pip-Datei ( /usr/local/bin/pip2.7und /usr/local/bin/pip) überprüft . Die Zeile sollte den richtigen Pfad zum Python-Pfad angeben. In meinem Fall nicht. Ich habe es korrigiert und jetzt funktioniert es gut.
Sahar
quelle
9

Falls es jemandem hilft, hat die in dieser anderen Frage erwähnte Lösung für mich funktioniert, als pip heute nach dem Upgrade nicht mehr funktionierte: Pip ist nach dem Upgrade defekt

Es scheint ein Problem zu sein, wenn sich ein zuvor zwischengespeicherter Speicherort ändert, sodass Sie den Cache mit diesem Befehl aktualisieren können:

hash -r
Jordanien
quelle
9

Um die Bedienung zu vereinfachen, können Sie den folgenden Befehl verwenden, um Version 2 neu zu installieren:

brew install python@2

Dann sieht es auf meinem Mac wie folgt aus:

 python -V
Python 2.7.10

 python2 -V
Python 2.7.14

 python3 -V
Python 3.6.5

 pip2 -V
pip 9.0.3 from /usr/local/lib/python2.7/site-packages (python 2.7)

 pip3 -V
pip 9.0.3 from /usr/local/lib/python3.6/site-packages (python 3.6)

 pip --version
pip 9.0.3 from /usr/local/lib/python2.7/site-packages (python 2.7)
feuyeux
quelle
1
Für die Neuinstallation gibt es reinstallBefehl in brew:brew reinstall python@2
Valeriy Van
4

Ich hatte das gleiche Problem. Ich habe sowohl Python 2.7 als auch 3.6 installiert. Python 2.7 virtualenvfunktionierte, aber nach der Installation von Python3 suchte virtualenv weiter nach Version 2.7 und konnte sie nicht finden. Dabei pip install virtualenvwird die Python3-Version von virtualenv installiert.

Wenn ich dann für jeden Befehl Python2 verwenden möchte, würde ich verwenden virtualenv --python=python2.7 somecommand

Yabrol
quelle
4

Ich hatte das gleiche Problem, virtualenv zeigte auf einen alten Python-Pfad. Durch das Beheben des Pfads wurde das Problem behoben:

$ virtualenv -p python2.7 env
-bash: /usr/local/bin/virtualenv: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory

$ which python2.7
/opt/local/bin/python2.7

# needed to change to correct python path
$ head  /usr/local/bin/virtualenv
#!/usr/local/opt/python/bin/python2.7 <<<< REMOVED THIS LINE
#!/opt/local/bin/python2.7 <<<<< REPLACED WITH CORRECT PATH

# now it works:
$ virtualenv -p python2.7 env
Running virtualenv with interpreter /opt/local/bin/python2.7
New python executable in env/bin/python
Installing setuptools, pip...done.
dg
quelle
Das hat funktioniert. Aber ist es eine langfristige Lösung? Ich bemerke dieses Problem mit ein paar anderen Dingen, daher müsste es für jede Instanz geändert werden, die nicht mehr funktioniert, und ich bin besorgt über die langfristigen Auswirkungen.
Jake T.
Auf keinen Fall eine langfristige Lösung. In meinem Fall hatte ich mich mit meiner Python-Umgebung beschäftigt, weshalb ich denke, dass sie in diese Situation geraten ist und nach einer schnellen Lösung gesucht hat. Ich vermute, dass die Deinstallation von virtualenv und die erneute Installation mit einem funktionierenden python2.7-Pip diesen Stick verursachen würden.
dg
2

Ich habe das gleiche Problem. Wenn ich renne brew link --overwrite python2. Da war noch zsh: /usr/local/bin//fab: bad interpreter: /usr/local/opt/python/bin/python2.7: no such file or directory.

cd /usr/local/opt/
mv python2 python

Ich habe es gelöst! Jetzt können wir die Python2-Versionsstruktur verwenden.

=== 25.07.2018 aktualisiert

Es gibt eine bequeme Möglichkeit, python2 version fab zu verwenden, wenn Ihr Betriebssystem python mit python3 verknüpft ist. .shfür Ihren Befehl.

# fab python2
cd /usr/local/opt
rm python
ln -s python2 python

# use the fab cli
...

# link to python3
cd /usr/local/opt
rm python
ln -s python3 python

Hoffe das hilft.

Peter. Chen
quelle
2

Das Bearbeiten der ersten Zeile dieser Datei hat bei mir funktioniert:

MBP-de-Jose:~ josejunior$ which python3

/usr/local/Cellar/python/3.7.3/bin/python3

MBP-de-Jose:~ josejunior$

Vor

#!/usr/local/opt/python/bin/python3.7

nach dem

#!/usr/local/Cellar/python/3.7.3/bin/python3
José Junior
quelle
2

Alles, was Sie tun müssen, ist ... das Terminalfenster zu schließen und ein neues zu öffnen, um dieses Problem zu beheben.

Das Problem ist, dass bashrc kein neuer Python-Pfad hinzugefügt wird (entweder Quell- oder neues Terminalfenster würden helfen).

Nithin Gaddam
quelle
1

In meinem Fall habe ich beschlossen, die Homebrew-Python-Installation von meinem Mac zu entfernen, da ich bereits zwei andere Python-Versionen über MacPorts auf meinem Mac installiert hatte. Dies verursachte die Fehlermeldung.

Die Neuinstallation von Python durch Brew hat mein Problem gelöst.

Simon
quelle
1
sudo /usr/bin/easy_install pip

Dieser Befehl hat für mich funktioniert

user9022502
quelle
1

Für mich musste ich unter centOS 7 die alte Pip-Verbindung von / bin by entfernen

rm /bin/pip2.7 
rm /bin/pip

dann verknüpfe es mit

sudo ln -s  /usr/local/bin/pip2.7 /bin/pip2.7

Dann wenn

/usr/local/bin/pip2.7

Funktioniert, das sollte funktionieren

Nimr Sawafta
quelle