Versão errada do Python retornada, com $PATH correto definido no ZSH

Versão errada do Python retornada, com $PATH correto definido no ZSH

algo muito errado está acontecendo com a configuração do meu ambiente. Enquanto estou tentando aprender, decidi reinstalar o Mac OSX El Capitan no meu Macbook Pro e começar a instalar e configurar tudo do zero. O Shell que estou usando é o ZSH e configurei-o um pouco com o Oh-My-ZShell.

Meu $PATH e Python:

~ ❯ echo $PATH
/Users/edchigliak/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/edchigliak/bin
~ ❯ python --version
Python 2.7.10
~ ❯

A captura de tela abaixo mostra claramente que há dois Python2 instalados /usr/bine um Homebrewed Python3 no /usr/local/bin.

Captura de tela do terminal dos caminhos Python2 e Python3

Aqui está o resultado de printenv(apenas entradas relacionadas a PATH e SHELL):

PATH=/Users/edchigliak/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/edchigliak/bin
PWD=/Users/edchigliak
SHELL=/usr/local/bin/zsh
SHLVL=2
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.lRGo5iu4NA/Listeners
TERM=screen-256color
ZSH=/Users/edchigliak/.oh-my-zsh
__CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0
_=/usr/bin/printenv

Primeira entrada no meu.zshrc:

export PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/bin 

Muito obrigado!

Responder1

Somente binários com nomes exatos pythonserão considerados quando você digitar pythonno prompt do shell.

Se você deseja pythonexecutar python3, a maneira simples de fazer isso é definir uma função ou alias em seus arquivos pessoais de inicialização do shell.

Você absolutamente não deve fazer pythonreferência a python3todo o sistema, porque isso quebrará alguns sistemas operacionais e ferramentas de terceiros que exigem pythona versão 2 do Python. As duas são linguagens (ou dialetos, se você preferir) mutuamente incompatíveis.

Para revisar o que está acontecendo aqui, quando você digita commandno prompt, o shell percorre os diretórios em seu PATHe procura um arquivo executável com o nome exato commandem cada um, até encontrar um ou ficar sem lugares para procurar. Ele simplesmente ignorará quaisquer arquivos com outros nomes, mesmo que sejam semelhantes, como xcommandou commandanteou command3.xx. Se você tiver um alias ou uma função, ele será usado, embora PATHtalvez você seja consultado para localizar outros comandos chamados pelo seu alias ou função.

Responder2

O shell procura PATH porcorrespondências exatas. Quando você digita python, ele tenta encontrar um executável correspondente ^python$; ^python...$Não é a mesma coisa.

No seu caso, pode não haver python em /usr/local/bin ou talvez haja um problema de permissão, o que faria com que ele fosse ignorado.

1) Se não houver pythonentrada /usr/local/bin:

Você pode usar sudo ln -s /usr/local/bin/python3.6 /usr/local/bin/pythonpara criar um link virtual pythonapontando para o interpretador Python que deseja usar. Como /usr/local/bin é pesquisado primeiro pelo seu PATH, o shell agora deve encontrar este link.

2) Se o arquivo existir, /usr/local/binmas não tiverexecutarpermissão, tente sudo chmod a+x /usr/local/bin/python.

Não consigo pensar em outros problemas agora.

informação relacionada