установка 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

Я использовал home-brew для установки 2.7 на OS X 10.10, и в новой установке отсутствовали ссылки на символы. Я побежал

brew link --overwrite python

как упоминалось в разделе Как создать символическую ссылку на python в Homebrew? и это решило проблему.

LancDec
источник
6
Это меня спасло. FWIW, мне нужно было сделать три шага, чтобы исправить мой Python на El Capitan: brew install python; варить linkapps python; brew link --overwrite python
Саиш
как сделать наоборот?
bubakazouba
3
реверс: brew unlink python
Anders B
1
Просто чтобы добавить к этому. Я обнаружил, что по какой-то причине мне пришлось запустить «xcode-select --install». «варить переустановить питон» не сработает, пока я этого не сделаю. В моем конкретном случае я использовал помощника по миграции для перехода с одного физического компьютера на другой. После этих двух вещей все было решено, и pip3 заработал.
chrisallick
Python уже был правильно связан для меня, что помогло, pip3 install --upgrade pipкак указал @Excalibur в комментариях ниже.
ретровертиго
56

Я предполагаю, что у вас есть две установки python или две установки pip, одна из которых была частично удалена.

Почему вы используете sudo? В идеале вы должны иметь возможность устанавливать и запускать все из своей учетной записи вместо использования 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.

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

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

Затем попробуйте pip --versionснова запустить вашу команду. Надеюсь, он подберет правильную версию и будет успешно работать.

Стивен Крыскалла
источник
отличные объяснения. Замечание: необходимость отладки диспетчера пакетов языка, установленного для вывода проекта из меркуриала, - вот что заставляет меня терять веру во все эти компьютерные штуки. упс .. А теперь новая ошибка Python «Локальный репозиторий AttributeError»
Николас
1
У меня такая же проблема, но это не помогло мне, даже после выполнения этих инструкций. PIP по-прежнему использует неверный путь. Есть ли другой способ сделать это?
Адам Старр,
5
Мне пришлось установить pip: sudo /usr/bin/easy_install pip- Нашел здесь: stackoverflow.com/questions/27308234/…
Адам Старр,
Проблема в том, что если это единственная установленная версия 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)
Excalibur
Нет: pip Traceback (последний вызов последним): файл "/ usr / local / bin / pip", строка 7, в <module> из pip._internal import main ImportError: нет модуля с именем pip._internal
einarc
@Excalibur Я добавил ваше решение в качестве комментария под принятым ответом. Спасибо за это!
ретровертиго
26

Я сделал ту же ошибку, используя sudo для своей установки. (ой)

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

Это вернуло все в норму.

ДэйвСондерс
источник
21
linkapps устарел
Стив
15

Поскольку на Mac OSX были установлены как Python 2, так и Python 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

В случае, если это кому-то поможет, решение, упомянутое в этом другом вопросе, сработало для меня, когда pip перестал работать сегодня после его обновления: Pip сломан после обновления

Похоже, что это проблема, когда изменяется ранее кэшированное местоположение, поэтому вы можете обновить кеш с помощью этой команды:

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)
Feuyeux
источник
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.
dg
источник
Это сработало. Но разве это долгосрочное решение? Я заметил эту проблему еще в паре вещей, поэтому для этого потребуется изменить ее для каждого случая, когда она больше не работает, и меня беспокоят долгосрочные последствия этого.
Джейк Т.
Определенно не долгое время. В моем случае я возился со своей средой Python, поэтому я думаю, что она попала в эту ситуацию и искала быстрое решение. Я подозреваю, что удаление virtualenv и его переустановка с помощью функционального пакета python2.7 сделают эту палку.
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

В моем случае я решил удалить установку homebrew python с моего Mac, так как у меня уже были две другие версии python, установленные на моем Mac через MacPorts. Это вызвало сообщение об ошибке.

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

Саймон
источник
1
sudo /usr/bin/easy_install pip

эта команда сработала для меня

user9022502
источник
1

Для меня в CentOS 7 мне пришлось удалить старую ссылку pip из / bin с помощью

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

TL; DR: pip на вашем пути находится символическая ссылка, и указанное место больше не содержит исполняемого файла. Вам необходимо обновить символическую ссылку.

Это помогает понять пару вещей.

  • Когда вы вводите что-то вроде pythonили pipвы будете искать, /etc/pathsчтобы попытаться найти соответствующий исполняемый файл для этой команды. Вы можете увидеть там все, используя cat /etc/paths.
  • Чтобы определить расположение исполняемого файла, который будет использовать ваша оболочка, есть удобная команда which, вы можете ввести which pythonили which pip. Это сообщит вам расположение исполняемого файла, который ваша оболочка будет использовать для этой команды.
  • Эта часть является ключевой . Местоположение может быть или не быть фактическим исполняемым файлом, это может быть символическая ссылка (символическая ссылка).
  • Обычно он /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
Глен Томпсон
источник