Saltar al contenido

macos – ¿Cómo cambiar la versión predeterminada de Python?

octubre 16, 2021
apple touch icon@2

[updated for 2021]

(Independientemente de si está en Mac, Linux o Windows 🙂

Si está confundido acerca de cómo iniciar la última versión de Python, en la mayoría de las plataformas es el caso que python3 deja tu python2 instalación intacta (debido a las razones de compatibilidad anteriores); por lo que puede iniciar python3 con el python3 mando.

Históricamente…

La convención de nomenclatura es que, en general, la mayoría de los scripts llamarán a python2 o python3 explícitamente. Esto sucedió debido a un necesidad de compatibilidad con versiones anteriores.

Aunque técnicamente Python ni siquiera garantiza la compatibilidad con versiones anteriores entre versiones menores, Python3 De Verdad rompe la compatibilidad con versiones anteriores. En ese momento, los programas que invocan ‘python‘estaban esperando python2 (que era la versión principal en ese momento). Los sistemas extremadamente antiguos pueden tener programas y scripts que esperan python= python2, y cambiar esto rompería esos programas y scripts.

En el momento en que se escribió esta respuesta, OP no debería haber cambiado esto debido a que mantiene la compatibilidad con los scripts antiguos.

Alrededor del año 2021 …

Hoy en día, muchos años después de la transición python2-> python3, la mayoría del software se refiere explícitamente a python2 o python3 (al menos en Linux). Por ejemplo, pueden llamar #!/usr/bin/env python2 o #!/usr/bin/env python3. Esto tiene por ejemplo (python-is-python3-package) liberó el comando de Python para que se pueda configurar a un valor predeterminado del usuario, pero realmente depende del sistema operativo.

La prescripción de cómo las distribuciones deben manejar el python comando fue escrito en 2011 como PEP 394 – El comando «python» en sistemas similares a Unix. Se actualizó por última vez en junio de 2019.

Básicamente, si está escribiendo una biblioteca, debe usar las versiones más específicas de Python que pueda usar. De lo contrario, como usuario final, puede cambiar el nombre de este para su uso personal (aunque es posible que su sistema operativo o distribución no lo hagan tan fácil).

Alias ​​de Shell:

Sin embargo, puede crear un alias personalizado en su shell. La forma en que lo haga depende del caparazón, pero tal vez pueda hacerlo alias py=python3y colóquelo en su archivo de inicio de shell. Esto solo funcionará en su computadora local (como debería), y es algo innecesario en comparación con simplemente escribirlo (a menos que invoque el comando constantemente).

Los usuarios confundidos no deben intentar crear alias o entornos virtuales o similares que hagan python ejecutar python3; esta es mala forma.Esto es aceptable hoy en día, pero PEP 394 sugiere animar a los usuarios a utilizar un virtualenv en lugar de.

Diferentes versiones 3. * o 2. * versiones:

En el caso extremadamente improbable de que si alguien llega a esta pregunta con dos versiones de python3, por ejemplo, 3.1 vs 3.2, y está confundido de que de alguna manera ha instalado dos versiones de Python, esto posiblemente se deba a que ha realizado instalaciones manuales y / o manuales. Puede usar las instalaciones estándar de instalación / desinstalación / administración de paquetes / programas de su sistema operativo para ayudar a rastrear las cosas, y tal vez (a menos que esté haciendo un trabajo de desarrollo que sorprendentemente se vea afectado por los pocos cambios incompatibles con versiones anteriores entre versiones menores) elimine la versión anterior ( o hacer make uninstall si hizo una instalación manual). Si necesita dos versiones, vuelva a configurar su $PATH variable por lo que la versión ‘predeterminada’ que desea está al frente; o si está utilizando la mayoría de las distribuciones de Linux, el comando que está buscando es sudo update-alternatives. Asegúrese de que cualquier programa que ejecute y que necesite acceso a las versiones anteriores pueda ser invocado correctamente por su entorno de llamada o shell (configurando el var PATH en ese entorno).

Un poco sobre $ PATH

nota al margen: Para elaborar un poco sobre PATH: las formas habituales en que se seleccionan los programas es a través de la PATH (echo $PATH en Linux y Mac) variable de entorno. Siempre puede ejecutar un programa con la ruta completa, por ejemplo /usr/bin/🔳 some args, o cd /usr/bin luego ./🔳 some args (reemplace el espacio en blanco con el programa ‘echo’ que mencioné anteriormente, por ejemplo), pero de lo contrario, escriba 🔳 some args no tiene sentido sin PATH env variable que declara los directorios en los que implícitamente podemos buscar y luego ejecutar archivos (si /usr/bin no estaba en PATH, entonces diría 🔳: command not found). El primer comando coincidente en el primer directorio es el que se ejecuta (el which comando en Linux y Mac le dirá qué subruta es esta). Por lo general, es (por ejemplo, en Linux, pero similar en Mac) algo como /usr/bin/python que es un enlace simbólico a otros enlaces simbólicos a la versión final en algún lugar, por ejemplo:

% echo $PATH
/usr/sbin:/usr/local/bin:/usr/sbin:usr/local/bin:/usr/bin:/bin

% which python
/usr/bin/python
% which python2
/usr/bin/python2
% ls -l /usr/bin/python
lrwxrwxrwx 1 root root 7 Mar  4  2019 /usr/bin/python -> python2*
% ls -l /usr/bin/python2  
lrwxrwxrwx 1 root root 9 Mar  4  2019 /usr/bin/python2 -> python2.7*
% ls -l /usr/bin/python2.7
-rwxr-xr-x 1 root root 3689352 Oct 10  2019 /usr/bin/python2.7*

% which python3         
/usr/bin/python3
% ls -l /usr/bin/python3
lrwxrwxrwx 1 root root 9 Mar 26  2019 /usr/bin/python3 -> python3.7*
% ls -l /usr/bin/python3.7
-rwxr-xr-x 2 root root 4877888 Apr  2  2019 /usr/bin/python3.7*

% ls -l /usr/bin/python*
lrwxrwxrwx 1 root root       7 Mar  4  2019 /usr/bin/python -> python2*
lrwxrwxrwx 1 root root       9 Mar  4  2019 /usr/bin/python2 -> python2.7*
-rwxr-xr-x 1 root root 3689352 Oct 10  2019 /usr/bin/python2.7*
lrwxrwxrwx 1 root root       9 Mar 26  2019 /usr/bin/python3 -> python3.7*
-rwxr-xr-x 2 root root 4877888 Apr  2  2019 /usr/bin/python3.7*
lrwxrwxrwx 1 root root      33 Apr  2  2019 /usr/bin/python3.7-config -> x86_64-linux-gnu-python3.7-config*
-rwxr-xr-x 2 root root 4877888 Apr  2  2019 /usr/bin/python3.7m*
lrwxrwxrwx 1 root root      34 Apr  2  2019 /usr/bin/python3.7m-config -> x86_64-linux-gnu-python3.7m-config*
lrwxrwxrwx 1 root root      16 Mar 26  2019 /usr/bin/python3-config -> python3.7-config*
lrwxrwxrwx 1 root root      10 Mar 26  2019 /usr/bin/python3m -> python3.7m*
lrwxrwxrwx 1 root root      17 Mar 26  2019 /usr/bin/python3m-config -> python3.7m-config*

nota al margen2: (En el caso más raro, un programa de Python invoca un subprograma con el subprocess módulo, para especificar qué programa ejecutar, se pueden modificar las rutas de los subprocesos con sys.path desde el módulo sys o el PYTHONPATH variable de entorno establecida en el padre, o especificando la ruta completa … pero dado que la ruta es heredada por procesos secundarios, esto no es un problema de forma remota).

close