Se devolvió una versión incorrecta de Python, con la $PATH correcta configurada en ZSH

Se devolvió una versión incorrecta de Python, con la $PATH correcta configurada en ZSH

Algo muy malo está sucediendo con la configuración de mi entorno. Mientras intento aprender, decidí reinstalar Mac OSX El Capitan en mi Macbook Pro y comenzar a instalar y configurar cosas desde cero. El Shell que estoy usando es ZSH y lo he configurado un poco con Oh-My-ZShell.

Mi $PATH y 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
~ ❯

La captura de pantalla a continuación muestra claramente que hay dos Python2 instalados /usr/biny un Python3 casero /usr/local/bin.

Captura de pantalla del terminal de las rutas de Python2 y Python3

Aquí está el resultado de printenv(solo entradas relacionadas con PATH y 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

Primera entrada en mi.zshrc:

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

¡Muchas gracias!

Respuesta1

Sólo se considerarán los archivos binarios nombrados exactamente pythoncuando escriba pythonen el símbolo del shell.

Si desea pythonejecutar python3, la forma más sencilla de hacerlo es establecer una función o alias en sus archivos de inicio de shell personales.

Absolutamente no debes mencionar pythontodo python3el sistema porque esto dañará algunos sistemas operativos y herramientas de terceros que requieren pythonser Python versión 2. Los dos son lenguajes (o dialectos, si lo prefieres) mutuamente incompatibles.

Para revisar lo que está sucediendo aquí, cuando escribe commanden el indicador, el shell recorre los directorios en su PATHy busca un archivo ejecutable con el nombre exacto commanden cada uno, hasta que encuentra uno o se queda sin lugares para buscar. Simplemente ignorará cualquier archivo con otros nombres, incluso si fueran similares, como xcommando commandanteo command3.xx. Si tiene un alias o una función, se usará en su lugar, aunque PATHquizás luego se le consulte para localizar otros comandos llamados por su alias o función.

Respuesta2

El shell busca PATH paracoincidencias exactas. Cuando escribe python, intenta encontrar un ejecutable coincidente ^python$; ^python...$no es lo mismo.

En su caso, podría ser que no haya Python en /usr/local/bin o tal vez haya un problema de permisos, lo que haría que se omita.

1) Si no hay pythonen /usr/local/bin:

Podría utilizar sudo ln -s /usr/local/bin/python3.6 /usr/local/bin/pythonpara crear un enlace suave pythonque apunte al intérprete de Python que desea utilizar. Debido a que primero se busca su RUTA en /usr/local/bin, el shell ahora debería encontrar este enlace.

2) Si el archivo existe /usr/local/binpero no tieneejecutarpermiso, inténtalo sudo chmod a+x /usr/local/bin/python.

No puedo pensar en otros problemas en este momento.

información relacionada