instalação do pip /usr/local/opt/python/bin/python2.7: mau intérprete: arquivo ou diretório inexistente

94

Não sei qual é o problema, mas estou preso seguindo algumas soluções de stackoverflow que não levam a lugar nenhum. Você pode me ajudar nisso?

  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
fonte

Respostas:

171

Eu tinha usado o home-brew para instalar o 2.7 no OS X 10.10 e a nova instalação não tinha os links simbólicos. Eu corri

brew link --overwrite python

conforme mencionado em How to symlink python in Homebrew? e resolveu o problema.

LancDec
fonte
6
Isso me salvou. FWIW, tive que seguir três etapas para consertar meu Python no El Capitan: brew install python; brew linkapps python; brew link --overwrite python
Saish
como fazer o inverso disso?
bubakazouba
3
reverso: brew unlink python
Anders B
1
Apenas para adicionar a isso. Descobri que precisava executar "xcode-select --install" por algum motivo. "brew reinstalar python" não funcionaria até que eu fizesse isso. Em meu caso específico, usei o assistente de migração para mover de um computador físico para outro. Depois dessas duas coisas, tudo foi resolvido e o pip3 funcionou.
chrisallick de
2
Python já estava corretamente linkado para mim, o que ajudou foi pip3 install --upgrade pipapontado por @Excalibur em um comentário bem abaixo.
retrovertigo
58

Suponho que você tenha duas instalações de python ou duas instalações de pip, uma das quais foi parcialmente removida.

Por que você usa sudo? Idealmente, você deve ser capaz de instalar e executar tudo a partir de sua conta de usuário em vez de usar o root. Se você misturar root e sua conta local, é mais provável que tenha problemas de permissão (por exemplo, veja o aviso que ele dá sobre "o diretório pai não pertence ao usuário atual").

O que você ganha se executar isso?

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

Isso mostrará qual binário python pipestá tentando usar. Se estiver apontando /usr/local/opt/python/bin/python2.7, tente executar isto:

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

Se disser "Não existe esse arquivo ou diretório", o pip está tentando usar um binário python que foi removido.

Em seguida, tente isto:

$ which python
$ which python2.7

Para ver o caminho do binário python que está realmente funcionando.

Visto que parece que o pip foi instalado com sucesso em algum lugar, pode ser que faça /usr/local/bin/pipparte de uma instalação mais antiga do pip que está mais acima no PATH. Para testar isso, você pode tentar mover o pipbinário que não funciona para fora do caminho, assim (pode exigir sudo):

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

Em seguida, tente executar o pip --versioncomando novamente. Esperançosamente, ele pega a versão correta e funciona com sucesso.

Steven Kryskalla
fonte
ótimas explicações. Outra nota: ter que depurar o gerenciador de pacotes de uma linguagem instalada para tirar um projeto do mercurial é o que me faz perder a fé em toda essa coisa de computador. opa .. E agora para um novo erro Python "AttributeError repositório local"
nicolas
1
Eu tenho o mesmo problema, mas isso não funcionou para mim, mesmo depois de seguir essas instruções. O PIP ainda está usando um caminho incorreto. Existe outra maneira de fazer isso?
Adam Starrh
5
Tive de instalar o pip: sudo /usr/bin/easy_install pip- Encontrei-o aqui: stackoverflow.com/questions/27308234/…
Adam Starrh
O problema é que, se essa é a única versão do pip instalada, você está sem sorte
einarc em
55

Única solução em OSX e sua variante.

ln -s /usr/local/bin/python /usr/local/opt/python/bin/python2.7
O Exorcista
fonte
1
Tentei apresentar a resposta de uma forma simples e contínua.
TheExorcist
É provável que isso tenha efeitos colaterais em outros programas que usam python. Além disso, o fim da vida útil do Python 2 é 1º de janeiro de 2020, e seus desenvolvedores indicaram que eventualmente (ou já em alguns ambientes) "python" sem modificador deve se referir a Python 3 python.org/dev/peps / pep-0394
kotoole
@kotoole Pela sua resposta, parece que seus olhos podem ver, mas não conseguem observar, apenas substitua o python2.7 por python3.x ele ainda funcionará da mesma forma.
TheExorcist
1
@TheExorcist infelizmente para todos nós, Python2 e Python3 são linguagens diferentes. O código escrito para um idioma será interrompido quando executado no outro. Substituir o python pelo python2.7 no atacado parece muito provável que interrompa outros aplicativos no futuro. Esta solução "funciona" da mesma forma que a exclusão da porta da frente funciona quando você esquece as chaves. Isso ajuda você, mas não chore quando sua casa começar a se encher de insetos.
kotoole
@kotoole offcourse, você está certo, mas às vezes temos que fazer o que precisamos fazer no momento.
TheExorcist
34

Fixando pip

Para este erro:

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

A fonte deste problema é um caminho Python incorreto codificado no pip (o que significa que não será corrigido, por exemplo, alterando seu $ PATH). Esse caminho não está mais codificado na versão mais recente do pip, então uma solução que deve funcionar é:

pip install --upgrade pip

Mas, é claro, esse comando usa pip, por isso falha com o mesmo erro.

A maneira de sair dessa bagunça:

  1. Corre which pip
  2. Abra esse arquivo em um editor de texto
  3. Altere a primeira linha de #!/usr/local/opt/python/bin/python2.7para eg #!/usr/local/opt/python2/bin/python2.7(observe o python2 no caminho) ou qualquer caminho para um interpretador python em funcionamento em sua máquina.
  4. Agora, pip install --upgrade pip(isso sobrescreve seu hack e faz com que o pip funcione na versão mais recente, onde o problema do interpretador deve ser corrigido)

Reparando o virtualenv

Para mim, encontrei esse problema por ter primeiro o problema idêntico do virtualenv:

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

A solução aqui é executar

pip uninstall virtualenv
pip install virtualenv

Se executar esse comando der o mesmo erro de pip, veja acima.

Kotoole
fonte
1
Sim, tendo Python 2.7 e 3.6 no Mac OSX e depois atualizar para 3.6, tive esse problema. Esta foi a solução que funcionou para mim ( pip3 install --upgrade pip)
Excalibur
Não: pip Traceback (última chamada mais recente): Arquivo "/ usr / local / bin / pip", linha 7, em <module> de pip._internal import main ImportError: Nenhum módulo chamado pip._internal
einarc
@Excalibur Eu adicionei sua solução como um comentário sob a resposta aceita. Obrigado por isso!
retrovertigo
26

Cometi o mesmo erro ao usar o sudo para minha instalação. (opa)

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

Isso trouxe tudo de volta ao normal.

DaveSaunders
fonte
22
linkapps está obsoleto
Steve
15

Como eu tinha o python 2 e o 3 instalados no Mac OSX, estava tendo todo tipo de erros.

Usei-o para encontrar a localização do meu arquivo python2.7 (/usr/local/bin/python2.7)

which python2.7

Então eu vinculei meu local de instalação real do python2.7 com aquele que o script esperava:

ln -s /usr/local/bin/python2.7 /usr/local/opt/python/bin/python2.7
Simon Briggs
fonte
2
Lifesaver! Obrigado.
Brian Fegter
13

Eu tive um problema semelhante. Basicamente, o pip estava procurando em um caminho errado (caminho de instalação antigo) ou python. A seguinte solução funcionou para mim:

  • Eu verifiquei onde está o caminho Python (tente which python)
  • Verifiquei a primeira linha no arquivo pip ( /usr/local/bin/pip2.7e /usr/local/bin/pip). A linha deve indicar o caminho correto para o caminho python. No meu caso, não. Eu corrigi e agora funciona bem.
sahar
fonte
9

Caso ajude alguém, a solução mencionada nesta outra questão funcionou para mim quando o pip parou de funcionar hoje após atualizá-lo: Pip quebrado após a atualização

Parece que é um problema quando um local previamente armazenado em cache muda, então você pode atualizar o cache com este comando:

hash -r
Jordânia
fonte
9

Para simplificar a operação, podemos usar o comando abaixo para reinstalar a versão 2:

brew install python@2

Então, no meu mac, é o seguinte:

▶ 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
fonte
1
Para reinstalar há reinstallcomando em brew:brew reinstall python@2
Valeriy Van
5

Eu tive o mesmo problema, virtualenv estava apontando para um caminho antigo do python. A correção do caminho resolveu o problema:

$ 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
fonte
Isso funcionou. Mas é uma solução de longo prazo? Percebo esse problema com algumas outras coisas, então isso exigiria alterá-lo para cada instância, ele não funciona mais, e estou preocupado com os efeitos de longo prazo disso.
Jake T.
Definitivamente, não é uma solução de longo prazo. No meu caso, eu tinha mexido no meu ambiente Python, por isso acho que ele entrou nessa situação e procurou uma solução rápida. Suspeito que desinstalar o virtualenv e depois reinstalá-lo com um pip python2.7 funcional tornaria esse problema.
dg
4

Eu tive o mesmo problema. Eu tenho o Python 2.7 e 3.6 instalado. O Python 2.7 estava virtualenvfuncionando, mas após instalar o Python3, o virtualenv continuou procurando pela versão 2.7 e não conseguiu encontrá-la. Fazendo pip install virtualenvinstalado a versão Python3 do virtualenv.

Então, para cada comando, se eu quiser usar Python2, eu usaria virtualenv --python=python2.7 somecommand

Yabrol
fonte
2

Eu tenho o mesmo problema. Se eu correr brew link --overwrite python2. Ainda havia 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

Resolvi-o! Agora podemos usar o tecido da versão python2.

=== 25/07/2018 atualizado

Há uma maneira conveniente de usar a versão fab do python2 quando seu sistema operacional python está vinculado ao python3. .shpelo seu comando.

# 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

Espero que isto ajude.

Peter. Chen
fonte
2

Editar a primeira linha deste arquivo funcionou para mim:

MBP-de-Jose:~ josejunior$ which python3

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

MBP-de-Jose:~ josejunior$

antes

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

depois de

#!/usr/local/Cellar/python/3.7.3/bin/python3
José júnior
fonte
2

Tudo o que você precisa fazer é ... fechar a janela do terminal e reabrir uma nova para corrigir esse problema.

O problema é que o novo caminho do Python não foi adicionado ao bashrc (o código-fonte ou a nova janela do terminal ajudariam).

Nithin
fonte
1

No meu caso, decidi remover a instalação do homebrew python do meu mac, pois já tinha duas outras versões do python instaladas no meu mac através do MacPorts. Isso causou a mensagem de erro.

Reinstalar o python por meio do brew resolveu meu problema.

Simon
fonte
1
sudo /usr/bin/easy_install pip

este comando funcionou para mim

user9022502
fonte
1

Para mim, no centOS 7 eu tive que remover o link antigo do pip de / bin por

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

então vincule-o novamente com

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

Então se

/usr/local/bin/pip2.7

Funciona, isso deve funcionar

Nimr Sawafta
fonte
0

Você pode ter duas versões diferentes de Python e pip.

Tente:

pip2 install --upgrade pip e depois pip2 install -r requirements.txt

Ou pip3se você estiver em uma versão mais recente do Python.

Wojciech Bednarski
fonte
0

TLDR: pip encontrado em seu caminho a é um link simbólico e o local referenciado não contém mais o executável. Você precisa atualizar o link simbólico.

Isso ajuda a entender algumas coisas.

  • Ao digitar algo como pythonou, pipvocê irá pesquisar /etc/pathspara tentar encontrar o executável associado a esse comando. Você pode ver tudo lá usando cat /etc/paths.
  • Para determinar a localização do executável que seu shell usará, há um comando útil which, você pode digitar which pythonou which pip. Isso lhe dirá a localização do executável que seu shell usará para esse comando.
  • Essa parte é fundamental . A localização pode ou não ser um executável real, pode ser um link simbólico (symlink).
  • É comum /etc/pathsconter /usr/local/bin, também é comum /usr/local/binhaver um monte de links simbólicos para os executáveis ​​reais. Não os executáveis ​​em si.
  • Se o executável no local referenciado dos links simbólicos não existir, você receberá um erro como bad interpreter: No such file or directory

Com isso dito, é provável que o problema seja pipum link simbólico e o executável vinculado provavelmente não exista mais naquele local. Para consertar, faça o seguinte

  1. Encontre a localização do executável - which pip(dá algo assim/usr/local/bin/pip )
  2. Verifique a localização de referência do link simbólico ls -l /usr/local/bin/pip | grep pip(forneça algo como isto pip -> /usr/local/opt/[email protected]/bin/pip3)
  3. Verifique se o executável existe no local referenciado ls /usr/local/opt/[email protected]/bin/pip3(você está tendo esse problema, então provavelmente não).
  4. Remova o link simbólico antigo rm -r /usr/local/bin/pip
  5. Encontre o pipexecutável real se usá- homebrewlo, /usr/local/optvocê pode usar algo como ls /usr/local/opt/ | grep pythonpara encontrá-lo.
  6. Adicione o link simbólico correto para o executável pip. ln -s /usr/local/opt/[email protected]/bin/pip3 /usr/local/bin/pip
Glen Thompson
fonte