instalacja pip /usr/local/opt/python/bin/python2.7: zły interpreter: nie ma takiego pliku lub katalogu

90

Nie wiem, o co chodzi, ale utknąłem podążając za niektórymi rozwiązaniami związanymi z przepełnieniem stosu, które prowadzą donikąd. Czy możesz mi w tym pomóc?

  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
źródło

Odpowiedzi:

168

Użyłem home-brew do zainstalowania 2.7 na OS X 10.10, a nowa instalacja nie zawierała linków symbolicznych. Pobiegłem

brew link --overwrite python

jak wspomniano w Jak dowiązać symboliczne Pythona w Homebrew? i to rozwiązało problem.

LancDec
źródło
6
To mnie uratowało. FWIW, musiałem wykonać trzy kroki, aby naprawić mój Python na El Capitan: zaparz instaluj pythona; napisz linkapps python; napisz link - overwrite python
Saish
jak to zrobić na odwrót?
bubakazouba
3
rewers: brew unlink python
Anders B
1
Wystarczy dodać do tego. Zauważyłem, że z jakiegoś powodu muszę uruchomić "xcode-select --install". „brew reinstalacja pythona” nie działała, dopóki tego nie zrobiłem. W moim przypadku użyłem asystenta migracji, aby przejść z jednego fizycznego komputera na drugi. Po tych dwóch rzeczach wszystko zostało rozwiązane i pip3 działał.
chrisallick
Python był już dla mnie poprawnie powiązany, co pomogło, pip3 install --upgrade pipjak wskazał @Excalibur w komentarzu poniżej.
retrovertigo
56

Domyślam się, że masz dwie instalacje Pythona lub dwie instalacje pip, z których jedna została częściowo usunięta.

Dlaczego używasz sudo? Idealnie byłoby, gdybyś był w stanie zainstalować i uruchomić wszystko z konta użytkownika zamiast używać roota. Jeśli pomieszasz konto root i konto lokalne, bardziej prawdopodobne jest, że napotkasz problemy z uprawnieniami (np. Zobacz ostrzeżenie, że „katalog nadrzędny nie jest własnością bieżącego użytkownika”).

Co otrzymasz, jeśli to uruchomisz?

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

To pokaże, który plik binarny Pythona pippróbuje użyć. Jeśli wskazuje /usr/local/opt/python/bin/python2.7, spróbuj uruchomić to:

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

Jeśli to mówi „Nie ma takiego pliku lub katalogu”, oznacza to, że pip próbuje użyć pliku binarnego Pythona, który został usunięty.

Następnie spróbuj tego:

$ which python
$ which python2.7

Aby zobaczyć ścieżkę do pliku binarnego Pythona, który faktycznie działa.

Ponieważ wygląda na to, że pip został gdzieś pomyślnie zainstalowany, może to być /usr/local/bin/pipczęść starszej instalacji pip, która znajduje się wyżej na PATH. Aby to sprawdzić, możesz spróbować odsunąć niedziałający pipplik binarny w ten sposób (może to wymagać sudo):

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

Następnie spróbuj pip --versionponownie uruchomić polecenie. Miejmy nadzieję, że wybierze poprawną wersję i będzie działać pomyślnie.

Steven Kryskalla
źródło
świetne wyjaśnienia. Uwaga: konieczność debugowania menedżera pakietów języka zainstalowanego w celu wyciągnięcia projektu z mercurial jest tym, co sprawia, że ​​tracę wiarę w te wszystkie sprawy związane z komputerem. Ups ... A teraz nowy błąd Pythona „Lokalne repozytorium AttributeError”
nicolas
1
Mam ten sam problem, ale to nie zadziałało, nawet po wykonaniu tych instrukcji. PIP nadal używa nieprawidłowej ścieżki. Czy jest inny sposób, aby to zrobić?
Adam Starrh
5
Musiałem zainstalować pip: sudo /usr/bin/easy_install pip- Znalazłem go tutaj: stackoverflow.com/questions/27308234/…
Adam Starrh
Problem polega na tym, że jeśli jest to jedyna zainstalowana wersja pip, to nie masz szczęścia
einarc
55

Jedyne rozwiązanie w OSX i jego wariancie.

ln -s /usr/local/bin/python /usr/local/opt/python/bin/python2.7
Egzorcysta
źródło
1
Postarałem się przedstawić odpowiedź w płynny i prosty sposób.
TheExorcist,
Może to mieć skutki uboczne dla innych programów korzystających z Pythona. Co więcej, koniec życia Pythona 2 przypada na 1 stycznia 2020 r., A jego twórcy wskazali, że ostatecznie (lub w niektórych środowiskach już) „python” bez modyfikatora powinien odnosić się do Python 3 python.org/dev/peps / pep-0394
kotoole
@kotoole Z twojej odpowiedzi wydaje się, że twoje oczy widzą, ale nie widzą, po prostu zastąp python2.7 python3.x, nadal będzie działać tak samo.
TheExorcist
1
@TheExorcist niestety dla nas wszystkich Python2 i Python3 to różne języki. Kod napisany dla jednego języka zepsuje się, gdy zostanie uruchomiony w drugim. Zastąpienie Pythona hurtowym pakietem python2.7 wydaje się wysoce prawdopodobne, że zepsuje inne aplikacje. To rozwiązanie „działa” tak samo, jak usuwanie drzwi wejściowych działa w przypadku zapomnienia kluczy. Prowadzi cię przez to, ale nie przychodź płakać, gdy twój dom zaczyna wypełniać się robakami.
kotoole
@kotoole offcourse, masz rację, ale czasami musimy zrobić to, co musimy w tej chwili.
TheExorcist
32

Mocowanie pip

W przypadku tego błędu:

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

Źródłem tego problemu jest zła ścieżka do Pythona zakodowana na stałe w pip (co oznacza, że ​​nie zostanie naprawiona np. Przez zmianę $ PATH). Ta ścieżka nie jest już zakodowana na stałe w najnowszej wersji pip, więc rozwiązaniem, które powinno działać, jest:

pip install --upgrade pip

Ale oczywiście to polecenie używa pip, więc kończy się niepowodzeniem z tym samym błędem.

Sposób na wyrwanie się z tego bałaganu:

  1. Biegać which pip
  2. Otwórz ten plik w edytorze tekstu
  3. Zmień pierwszą linię z #!/usr/local/opt/python/bin/python2.7na np. #!/usr/local/opt/python2/bin/python2.7(Zwróć uwagę na python2 w ścieżce) lub dowolną ścieżkę do działającego interpretera Pythona na twoim komputerze.
  4. Teraz pip install --upgrade pip(to nadpisuje twój hack i sprawi, że pip będzie działał w najnowszej wersji, gdzie problem interpretera powinien zostać naprawiony)

Naprawianie virtualenv

U mnie znalazłem ten problem, najpierw mając ten sam problem z virtualenv:

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

Rozwiązaniem jest ucieczka

pip uninstall virtualenv
pip install virtualenv

Jeśli uruchomienie tego polecenia powoduje ten sam błąd z pip, patrz powyżej.

kotoole
źródło
1
Tak, mając Pythona 2.7 i 3.6 na Mac OSX, a następnie zaktualizowałem do 3.6, miałem ten problem. To było rozwiązanie, które zadziałało dla mnie ( pip3 install --upgrade pip)
Excalibur
Nie: pip Traceback (ostatnie połączenie ostatnio): Plik "/ usr / local / bin / pip", wiersz 7, w <module> z pip._internal import main ImportError: Brak modułu o nazwie pip._internal
einarc
@Excalibur Dodałem Twoje rozwiązanie jako komentarz pod zaakceptowaną odpowiedzią. Dziękuję za to!
retrovertigo
26

Popełniłem ten sam błąd, używając sudo do mojej instalacji. (ups)

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

To wszystko wróciło do normy.

DaveSaunders
źródło
21
linkapps jest przestarzałe
Steve
15

Ponieważ miałem zainstalowane zarówno pythona 2, jak i 3 w systemie Mac OSX, pojawiały się różnego rodzaju błędy.

Użyłem tego, aby znaleźć lokalizację mojego pliku python2.7 (/usr/local/bin/python2.7)

which python2.7

Następnie połączyłem moją prawdziwą lokalizację instalacji pythona2.7 z tą, której oczekiwał skrypt:

ln -s /usr/local/bin/python2.7 /usr/local/opt/python/bin/python2.7
Simon Briggs
źródło
2
Ratownik! Dziękuję Ci.
Brian Fegter
12

Miałem podobny problem. Zasadniczo pip szukał złej ścieżki (starej ścieżki instalacji) lub Pythona. U mnie zadziałało następujące rozwiązanie:

  • Sprawdziłem, gdzie jest ścieżka Pythona (spróbuj which python )
  • Sprawdziłem pierwszą linię w pliku pip ( /usr/local/bin/pip2.7i /usr/local/bin/pip). Linia powinna zawierać poprawną ścieżkę do ścieżki Pythona. W moim przypadku nie. Poprawiłem to i teraz działa dobrze.
sahar
źródło
9

Na wypadek, gdyby to komuś pomogło, rozwiązanie wspomniane w tym drugim pytaniu zadziałało, gdy pip przestał działać dzisiaj po aktualizacji: Pip uszkodzony po aktualizacji

Wygląda na to, że jest to problem, gdy zmienia się wcześniej zbuforowana lokalizacja, więc możesz odświeżyć pamięć podręczną za pomocą tego polecenia:

hash -r
Jordania
źródło
9

Aby uprościć obsługę, możemy użyć poniższego polecenia, aby ponownie zainstalować wersję 2:

brew install python@2

Wtedy na moim Macu wygląda to jak poniżej:

▶ 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
źródło
1
Do ponownej instalacji jest reinstallpolecenie w brew:brew reinstall python@2
Valeriy Van
4

Miałem ten sam problem. Mam zainstalowany zarówno Python 2.7, jak i 3.6. Python 2.7 virtualenvdziałał, ale po zainstalowaniu Pythona3 virtualenv szukał wersji 2.7 i nie mógł jej znaleźć. Robićpip install virtualenv zainstalował wersję Python3 z virtualenv.

Następnie dla każdego polecenia, jeśli chcę używać Python2, użyłbym virtualenv --python=python2.7 somecommand

yabrol
źródło
4

Miałem ten sam problem, virtualenv wskazywał na starą ścieżkę w Pythonie. Naprawienie ścieżki rozwiązało problem:

$ 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
źródło
To zadziałało. Ale czy to rozwiązanie długoterminowe? Zauważyłem ten problem z kilkoma innymi rzeczami, więc wymagałoby to zmiany go za każdym razem, gdy już nie działa, i martwię się o długoterminowe skutki tego.
Jake T.
Zdecydowanie nie jest to rozwiązanie długoterminowe. W moim przypadku grzebałem w swoim środowisku Pythona, dlatego myślę, że znalazłem się w tej sytuacji i szukałem szybkiego rozwiązania. Podejrzewam, że odinstalowanie virtualenv, a następnie ponowne zainstalowanie go z działającym pipem Pythona2.7 spowodowałoby ten kij.
dg
2

Mam ten sam problem. Jeśli biegnę brew link --overwrite python2. Nadal było 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

Rozwiązałem to! Teraz możemy użyć tkaniny w wersji python2.

=== 2018/07/25 zaktualizowany

Istnieje wygodny sposób na użycie wersji fab python2, gdy twój system operacyjny python jest połączony z python3. .shna twoje rozkazy.

# 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

Mam nadzieję że to pomoże.

Piotr. Chen
źródło
2

Edycja pierwszej linii tego pliku zadziałała dla mnie:

MBP-de-Jose:~ josejunior$ which python3

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

MBP-de-Jose:~ josejunior$

przed

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

po

#!/usr/local/Cellar/python/3.7.3/bin/python3
José Junior
źródło
2

Wszystko, co musisz zrobić, to ... zamknąć okno terminala i ponownie otworzyć nowe, aby rozwiązać ten problem.

Problem polega na tym, że nowa ścieżka Pythona nie jest dodawana do bashrc (pomogłoby albo źródło, albo nowe okno terminala).

Nithin Gaddam
źródło
1

W moim przypadku zdecydowałem się usunąć instalację homebrew python z mojego komputera Mac, ponieważ miałem już dwie inne wersje Pythona zainstalowane na moim komputerze Mac przez MacPorts. To spowodowało komunikat o błędzie.

Ponowna instalacja Pythona przez brew rozwiązała mój problem.

Szymon
źródło
1
sudo /usr/bin/easy_install pip

to polecenie zadziałało dla mnie

user9022502
źródło
1

Dla mnie na centOS 7 musiałem usunąć stary link pip z / bin by

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

następnie połącz go ponownie za pomocą

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

A następnie, jeśli

/usr/local/bin/pip2.7

Działa, to powinno działać

Nimr Sawafta
źródło
0

Możesz mieć dwie różne wersje Pythona i pip.

Spróbuj:

pip2 install --upgrade pip i wtedy pip2 install -r requirements.txt

Lub pip3jeśli korzystasz z nowszej wersji Pythona.

Wojciech Bednarski
źródło
0

TLDR: pip znaleziony w twojej ścieżce a jest dowiązaniem symbolicznym, a wskazana lokalizacja nie zawiera już pliku wykonywalnego. Musisz zaktualizować łącze symboliczne.

Pomaga zrozumieć kilka rzeczy.

  • Kiedy wpiszesz coś podobnego pythonlub system pipoperacyjny będzie szukał, /etc/pathsaby spróbować znaleźć plik wykonywalny powiązany z tym poleceniem. Możesz tam zobaczyć wszystko, używająccat /etc/paths .
  • Aby określić lokalizację pliku wykonywalnego, którego użyje Twoja powłoka, możesz użyć przydatnego polecenia which, możesz wpisać which pythonlub which pip. Dzięki temu dowiesz się, gdzie znajduje się plik wykonywalny, którego powłoka będzie używać dla tego polecenia.
  • Ta część jest kluczowa . Lokalizacja może, ale nie musi być rzeczywistym plikiem wykonywalnym, może to być łącze symboliczne (łącze symboliczne).
  • Często zdarza się, /etc/pathsże zawiera /usr/local/bin, ale często też /usr/local/binjest zbiorem dowiązań symbolicznych do rzeczywistych plików wykonywalnych. Nie same pliki wykonywalne.
  • Jeśli plik wykonywalny w lokalizacji, do której istnieją odnośniki, nie istnieje, pojawi się błąd, taki jak bad interpreter: No such file or directory

Mając to na uwadze, problem prawdopodobnie pipjest związany z dowiązaniem symbolicznym, a połączony plik wykonywalny prawdopodobnie już nie istnieje w tej lokalizacji. Aby to naprawić, wykonaj następujące czynności

  1. Znajdź lokalizację pliku wykonywalnego - which pip(podaje coś takiego /usr/local/bin/pip)
  2. Sprawdź lokalizację odnośnika symbolicznego ls -l /usr/local/bin/pip | grep pip(podaj coś takiego pip -> /usr/local/opt/[email protected]/bin/pip3)
  3. Sprawdź, czy plik wykonywalny istnieje w podanej lokalizacji ls /usr/local/opt/[email protected]/bin/pip3 (masz ten problem, więc prawdopodobnie tak nie jest).
  4. Usuń stare łącze symboliczne rm -r /usr/local/bin/pip
  5. Znaleźć rzeczywiste pipwykonywalny przypadku korzystania homebrewbędzie się /usr/local/optmożna użyć coś jak ls /usr/local/opt/ | grep pythongo znaleźć.
  6. Dodaj odpowiednie łącze symboliczne do pliku wykonywalnego pip. ln -s /usr/local/opt/[email protected]/bin/pip3 /usr/local/bin/pip
Glen Thompson
źródło