установка pip /usr/local/opt/python/bin/python2.7: поганий інтерпретатор: такого файлу або каталогу немає


90

Я не знаю, в чому справа, але я застряг, дотримуючись деяких рішень stackoverflow, які нікуди не діваються. Чи можете ви допомогти мені у цьому?

  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

Відповіді:


168

Я використовував домашню заварку для встановлення 2.7 на OS X 10.10, і в новій установці відсутні символьні посилання. Я побіг

brew link --overwrite python

як згадувалося в розділі Як зв'язати python на домашній мові? і це вирішило проблему.


6
Це мене врятувало. FWIW, мені довелося зробити три кроки, щоб виправити свій Python на El Capitan: заваріть install python; заварювати лінкаппс пітон; заварювальне посилання --записати python
Saish

як зробити зворотне з цього?
bubakazouba

3
реверс: заварити пітон для від’єднання
Anders B

1
Просто щоб додати до цього. Я виявив, що мені довелося запустити "xcode-select --install" з будь-якої причини. "brew reinstall python" не працював, поки я цього не зробив. У моєму конкретному випадку я використовував помічника міграції для переходу з одного фізичного комп'ютера на інший. Після цих двох речей все було вирішено, і pip3 спрацював.
chrisallick

Python вже був правильно пов’язаний для мене, що допомогло, pip3 install --upgrade pipяк зазначив @Excalibur у коментарі нижче.
ретровертиго

56

Я припускаю, що у вас є дві установки python або дві установки pip, одна з яких була частково видалена.

Чому ви використовуєте sudo? В ідеалі ви повинні мати можливість встановлювати та запускати все зі свого облікового запису користувача, а не використовувати root. Якщо ви змішаєте root і локальний обліковий запис разом, ви, швидше за все, зіткнетеся з проблемами дозволів (наприклад, див. Попередження, яке він дає про "батьківський каталог не належить поточному користувачеві").

Що ви отримаєте, якщо запустите це?

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

Це покаже вам, який двійковий файл python pipнамагається використовувати. Якщо він вказує /usr/local/opt/python/bin/python2.7, спробуйте запустити це:

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

Якщо в ньому сказано "Немає такого файлу або каталогу", тоді pip намагається використовувати видалений двійковий файл python.

Далі спробуйте це:

$ which python
$ which python2.7

Щоб побачити шлях до бінарного файлу python, який насправді працює.

Оскільки схоже на те, що піп десь було успішно встановлено, можливо, /usr/local/bin/pipце частина старої інсталяції піп, яка знаходиться вище в PATH. Щоб перевірити це, ви можете спробувати перенести непрацюючий pipдвійковий файл із шляху, подібного до цього (може знадобитися sudo):

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

Потім спробуйте запустити свою pip --versionкоманду ще раз. Сподіваємось, він підбирає правильну версію та успішно працює.


чудові пояснення. Sidenote: необхідність налагоджувати менеджер пакунків мови, встановленої для виведення проекту з ртутного, - це те, що змушує мене втратити віру у всі ці комп’ютерні речі. ой .. А тепер нова помилка пітона "Локальне сховище AttributeError"
nicolas

1
У мене така сама проблема, але це не спрацювало у мене, навіть після дотримання цих інструкцій. PIP все ще використовує неправильний шлях. Чи є інший спосіб зробити це?
Адам Старр

5
Я повинен був встановити Піп: sudo /usr/bin/easy_install pip- Знайшов тут: stackoverflow.com/questions/27308234 / ...
Адам Starrh

Проблема в тому, що якщо це єдина встановлена ​​версія pip, тобі не пощастило
einarc

55

Єдине рішення в OSX та його варіант.

ln -s /usr/local/bin/python /usr/local/opt/python/bin/python2.7

1
Намагався подати відповідь безперешкодно і просто.
TheExorcist

Це, ймовірно, матиме побічні ефекти для інших програм, що використовують python. Більше того, кінець життя Python 2 - 1 січня 2020 року, і його розробники вказали, що врешті-решт (або в деяких середовищах вже) "python" без модифікатора повинен посилатися на Python 3 python.org/dev/peps / pep-0394
kotoole

@kotoole З вашої відповіді здається, що ваші очі бачать, але не спостерігають, просто замініть python2.7 на python3.x, він все одно буде працювати так само.
TheExorcist

1
@TheExorcist, на жаль для всіх нас, Python2 та Python3 - це різні мови. Код, написаний для однієї мови, зламається при запуску на іншій. Заміна python на python2.7 оптовою торгівлею, здається, з великою ймовірністю може зламати інші програми. Це рішення "працює" так само, як видалення вхідних дверей працює, коли ви забули ключі. Це вас пробиває, але не плачте, коли ваш будинок почне наповнюватися помилками.
kotoole

@kotoole offcourse, ти маєш рацію, але іноді ми маємо робити те, що нам потрібно робити на даний момент.
TheExorcist

32

Фіксуючий піп

Для цієї помилки:

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

Джерелом цієї проблеми є неправильний шлях python, закодований у pip (що означає, що він не буде виправлений, наприклад, зміною $ PATH). Цей шлях вже не жорстко закодований в останній версії pip, тому рішення, яке має працювати:

pip install --upgrade pip

Але, звичайно, ця команда використовує pip, тому вона не працює з тією ж помилкою.

Спосіб вирватися з цього безладу:

  1. Біжи which pip
  2. Відкрийте цей файл у текстовому редакторі
  3. Змініть перший рядок #!/usr/local/opt/python/bin/python2.7на наприклад #!/usr/local/opt/python2/bin/python2.7(зверніть увагу на python2 у шляху) або будь-який шлях до працюючого інтерпретатора python на вашій машині.
  4. Тепер pip install --upgrade pip(це перезаписує ваш хак і призводить до того, що pip працює в останній версії, де проблема з інтерпретатором повинна бути виправлена)

Фіксація virtualenv

Для мене я знайшов цю проблему, спочатку маючи однакову проблему від virtualenv:

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

Рішення тут - запустити

pip uninstall virtualenv
pip install virtualenv

Якщо запуск цієї команди дає таку ж помилку від pip, див. Вище.


1
Так, маючи Python 2.7 та 3.6 на Mac OSX, а потім оновившись до 3.6, у мене була ця проблема. Це рішення pip3 install --upgrade pip
Екскалібур,

Nope: Trapback pip (останній останній дзвінок): Файл "/ usr / local / bin / pip", рядок 7, у <module> з pip._internal main main ImportError: Немає модуля з іменем pip._internal
einarc

@Excalibur Я додав ваше рішення як коментар під прийняту відповідь. Дякую за це!
ретровертиго

26

Я зробив ту ж помилку, використовуючи sudo для моєї установки. (ой)

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

Це нормалізувало все.


22
linkapps припинено
Стів

15

Оскільки на Mac OSX у мене були встановлені і python 2, і 3, у мене були всілякі помилки.

Я використовував це, щоб знайти розташування мого файлу python2.7 (/usr/local/bin/python2.7)

which python2.7

Потім я символічно зв’язав своє справжнє місце встановлення python2.7 з тим, яке очікував сценарій:

ln -s /usr/local/bin/python2.7 /usr/local/opt/python/bin/python2.7

2
Спаситель! Дякую.
Брайан Фегтер

12

У мене була подібна проблема. В основному pip шукав неправильний шлях (старий шлях встановлення) або python. Для мене спрацювало таке рішення:

  • Я перевірив, де знаходиться шлях до python (спробуйте which python)
  • Я перевірив перший рядок у файлі pip ( /usr/local/bin/pip2.7та /usr/local/bin/pip). У рядку повинен бути вказаний правильний шлях до шляху python. У моєму випадку ні. Я виправив це, і зараз воно працює нормально.

9

Якщо комусь це допомагає, рішення, згадане в цьому іншому питанні, спрацювало для мене, коли піп сьогодні перестав працювати після його оновлення: Піп зламався після оновлення

Здається, це проблема, коли змінюється раніше кешоване місце, тому ви можете оновити кеш за допомогою цієї команди:

hash -r

9

Для спрощення роботи ми можемо скористатися наведеною нижче командою для перевстановлення версії 2:

brew install python@2

Тоді на моєму mac це виглядає так:

▶ 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)

1
Для перевстановлення є reinstallкоманда в brew:brew reinstall python@2
Валерій Ван

4

У мене була та ж проблема. У мене встановлені як Python 2.7, так і 3.6. Python 2.7 virtualenvпрацював, але після встановлення Python3 virtualenv продовжував шукати версію 2.7 і не міг її знайти. Doing pip install virtualenvвстановлена версія Python3 з virtualenv.

Тоді для кожної команди, якщо я хочу використовувати Python2, я б використовував virtualenv --python=python2.7 somecommand


4

У мене була та ж проблема, virtualenv вказував на старий шлях python. Виправлення шляху вирішило проблему:

$ 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.

Це спрацювало. Але чи це довгострокове виправлення? Я помічаю цю проблему з кількома іншими речами, тому для цього потрібно буде змінити її для кожного випадку, коли вона вже не працює, і я стурбований довгостроковими наслідками цього.
Джейк Т.

Безумовно, це не довгострокове виправлення. У моєму випадку я перекручував моє середовище python, тому я думаю, що він потрапив у цю ситуацію і шукав швидкого виправлення. Я підозрюю, що видалення virtualenv, а потім перевстановлення його за допомогою функціонального python2.7 pip зробить цю палицю.
dg

2

У мене така сама проблема. Якщо я біжу brew link --overwrite python2. Був ще 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

Вирішив! Тепер ми можемо використовувати тканину версії python2.

=== 2018/07/25 оновлено

Існує зручний спосіб використовувати версію fab python2, коли ваш os python пов'язаний з python3. .shдля вашої команди.

# 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

Сподіваюся, це допомагає.


2

Редагування першого рядка цього файлу мені вдалося:

MBP-de-Jose:~ josejunior$ which python3

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

MBP-de-Jose:~ josejunior$

раніше

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

після

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

2

Все, що вам потрібно зробити, це ... закрити вікно терміналу та знову відкрити нове, щоб вирішити цю проблему.

Проблема в тому, що новий шлях до python не додається до bashrc (допоможе або джерело, або нове вікно терміналу).


1

У моєму випадку я вирішив видалити з мого mac домашню піратську установку python, оскільки на моєму mac вже було встановлено дві інші версії python через MacPorts. Це спричинило повідомлення про помилку.

Повторна інсталяція python через brew вирішила мою проблему.



1

Для мене на centOS 7 мені довелося видалити старе посилання на піп з / bin by

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

потім зв’яжіть його з

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

Тоді якщо

/usr/local/bin/pip2.7

Працює, це має спрацювати


0

Ви можете мати дві різні версії Python і pip.

Намагайся:

pip2 install --upgrade pip і потім pip2 install -r requirements.txt

Або pip3якщо ви використовуєте новішу версію Python.


0

TLDR: pip знайдене у вашому шляху a є символічним посиланням, і вказане місце більше не містить виконуваний файл. Вам потрібно оновити символічне посилання.

Це допомагає зрозуміти пару речей.

  • Коли ви вводите щось на зразок, pythonабо pipви будете шукати, /etc/pathsщоб спробувати знайти відповідний виконуваний файл для цієї команди. Ви можете побачити все там, використовуючи cat /etc/paths.
  • Щоб визначити розташування виконуваного файлу, який буде використовувати ваша оболонка, є зручна команда which, ви можете ввести which pythonабо which pip. Це покаже вам розташування виконуваного файлу, який ваша оболонка буде використовувати для цієї команди.
  • Ця частина є ключовою . Місцеположення може бути фактичним виконуваним файлом, а може і не бути символічним посиланням (symlink).
  • Це загальне для /etc/pathsвмісту /usr/local/bin, також спільне для того, /usr/local/binщоб бути купа символічних посилань на фактичні виконувані файли. Не самі виконувані файли.
  • Якщо виконуваний файл у місці посилання на символічні посилання не існує, ви отримаєте повідомлення про помилку bad interpreter: No such file or directory

З урахуванням сказаного, проблема, швидше за все, pipполягає в символічному посиланні, і пов'язаний виконуваний файл, ймовірно, більше не існує в цьому місці. Щоб виправити це, виконайте наступне

  1. Знайдіть розташування виконуваного файлу - which pip(дає щось подібне /usr/local/bin/pip)
  2. Перевірте місце посилання на символічне посилання ls -l /usr/local/bin/pip | grep pip(дайте щось подібне pip -> /usr/local/opt/python@3.7/bin/pip3)
  3. Перевірте, чи існує виконуваний файл у вказаному місці ls /usr/local/opt/python@3.7/bin/pip3(у вас виникла ця проблема, тож, можливо, цього немає).
  4. Видаліть старе символічне посилання rm -r /usr/local/bin/pip
  5. Знайдіть справжній pipвиконуваний файл, якщо homebrewйого використання буде, /usr/local/optви можете використати щось на зразок того, ls /usr/local/opt/ | grep pythonщоб знайти його.
  6. Додайте правильне символічне посилання для виконуваного файла pip. ln -s /usr/local/opt/python@3.7/bin/pip3 /usr/local/bin/pip
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.