¿Cómo hacer que el comando del programa 'python' ejecute Python 3?

331

El pythoncomando del programa ejecuta Python 2. Python 3 puede ejecutarse usando el python3comando. ¿Cómo se puede ejecutar Python 3 con el pythoncomando?

Giri
fuente
30
Solo una advertencia: no intente cambiar el enlace simbólico / usr / bin / python para que apunte a python3 en lugar de 2.7. Muchos programas disponibles en los repositorios de Ubuntu requieren / usr / bin / python para ser compatibles con python 2.x.
soulsource
1
Ah, ahora entiendo lo que querías decir con la actualización ... En realidad, los desarrolladores de Ubuntu están trabajando en eso: wiki.ubuntu.com/Python/3 "Es un objetivo de lanzamiento para Ubuntu 14.04 LTS tener solo Python 3 en el CD de escritorio imágenes ".
soulsource
1
En otra nota, cualquiera que venga aquí porque está tratando de aprender acerca de cómo hacer que Python 3 sea el predeterminado, en cambio puede encontrar uso en la investigación de entornos virtuales (por ejemplo, virtualenv) o contenedores (por ejemplo, LXC o Docker).
Kevin
1
En referencia a la advertencia de soulsource en la parte superior, vea PEP 394 que estandariza las convenciones de nomenclatura para los ejecutables Python coexistentes y en la que confían (y deberían) los programadores de Python y los mantenedores de paquetes.
David Foerster
2
@wjandrea, sí, incluso en un entorno virtual, pythondebe mantenerse como significado python2. Quise decir mi comentario como una forma de tener una versión de Python específica de la aplicación en lugar de tratar de evitar el Python del sistema.
Kevin

Respuestas:

370

Una forma segura y sencilla sería utilizar un alias. Coloque esto en ~/.bashrco ~/.bash_aliasesarchivo:

alias python=python3

Después de agregar lo anterior en el archivo, ejecute source ~/.bashrco source ~/.bash_aliases.

Por ejemplo:

$ python --version
Python 2.7.6
$ python3 --version
Python 3.4.3
$ alias python=python3
$ python --version
Python 3.4.3

Para eludir el alias, use el commandcomando incorporado:

$ command python --version
Python 2.7.6

Otra forma de eludir el alias es usarlo \antes del comando.

$ \python --version 
Python 2.7.6

Para deshabilitar el alias en el shell actual, use el unaliascomando incorporado:

$ unalias python
$ python --version
Python 2.7.6
Radu Rădeanu
fuente
1
así que no hay opción de "actualización" .. ??
Giri
44
en realidad quiero borrar 2.7 y reemplazarlo con 3.3. Parece que es una mala idea por ahora ..
Giri
35
+1 no hay razón para purgar 2.7 para poder trabajar con 3.3. Como mucho software todavía depende de 2.7; solo mantenlo persistente.
don.joey
66
@begueradj Un alias es totalmente diferente de un enlace simbólico .
Radu Rădeanu
1
Una advertencia: esto puede romper otros scripts que esperan Python 2.7.
kmiklas
85

[Junio ​​de 2016] El lugar recomendado para obtener información sobre la transición es la página oficial de Ubuntu Python .


Desde el wiki de Ubuntu :

Tanto para Ubuntu como para Debian, tenemos objetivos de proyecto en curso para hacer de Python 3 la versión de Python predeterminada y preferida en las distribuciones.

Lo que esto no significa:

  • /usr/bin/pythonseñalará a Python 3. No, esto no va a suceder (a menos que PEP 394 defienda lo contrario, lo cual es dudoso en el futuro previsible). /usr/bin/pythony /usr/bin/python2apuntará a Python 2.7 y /usr/bin/python3apuntará a la última versión compatible de Python 3.

  • Python 2 se eliminará del archivo. No, esto no va a suceder . Esperamos que Python 2.7 siga siendo compatible y esté disponible en Ubuntu durante bastante tiempo, dado que PEP 373 promete soporte de mantenimiento de corrección de errores hasta 2020.

No se recomienda cambiar el enlace simbólico debido a otras dependencias del paquete, pero "tienen objetivos de proyecto en curso para hacer de Python 3 la versión de Python predeterminada y preferida en las distribuciones".


Para el uso de la CLI, como @Radu Rădeanu , yo recomendaría poner un alias en el usuario ~/.bashrc, .bash_aliasesarchivo (los archivos diferentes, entre ellos ~/.bash_profile, están cargados al menos una vez, son en su mayoría con fines de organización, pero puede variar según la plataforma). Los entornos virtuales de Python también funcionan bien.

Ejemplos de alias:

alias python=python3

o

alias python='/usr/bin/python3'

Las secuencias de comandos aún deben usar algo como #!/usr/bin/env python3compatibilidad cruzada.

Usar enves bueno para uso mixto con entornos virtuales.

Nota (gracias a @wjandrea): los alias son parte del tiempo de ejecución de bash, no del entorno del usuario. Por lo tanto, no están disponibles para shebang ( #!). Si prefiere el alias python = python3, algunos program.pysin shebang podrían ejecutarse invocando al intérprete con alias de esta manera python program.py. El alias también puede ser útil para sistemas con múltiples versiones de python3 como 3.4 y 3.6 juntas.

Kevin
fuente
1
Esto parece estar desactualizado ahora: planearon eliminar python2 en Xenial, pero luego no lo hicieron.
OrangeDog
1
@OrangeDog, gracias por la actualización. Sí, la página wiki que cité ahora está marcada como desactualizada, ya que se han realizado más progresos en los últimos dos años para pasar solo a Python 3. La nueva página para seguir esta progresión es la página oficial de Ubuntu Python .
Kevin
La página "más reciente" también está desactualizada con respecto a los planes para Xenial.
OrangeDog
No diría que está "desactualizado" tanto como "no se ha actualizado recientemente". Todavía parece ser la ubicación actual para mantener publicaciones sobre esto. Sin embargo, en los comentarios aquí, agradecería cualquier otra fuente reciente que alguien pueda encontrar. Agregar más fuentes a mi respuesta, sobre por qué no hacer el cambio solo python, no es realmente relevante hasta que se complete la conversión. Incluso entonces, puede convertirse en un problema.
Kevin
2
Los alias son internos de Bash, no forman parte del entorno, por lo que aún tendrá que usarlo python3en un shebang, no python.
wjandrea
28

Actualización: He aprendido que esta es la manera incorrecta, ya que Python2 y Python3 no son intercambiables.

Puedes probar la herramienta de línea de comando update-alternatives.

$ sudo update-alternatives --config python

Si obtiene el error "no hay alternativas para python", configure una alternativa usted mismo con el siguiente comando:

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

Cambie la ruta /usr/bin/python3a la versión de Python deseada en consecuencia.

webwurst
fuente
20
python2 y python3 no son alternativas. No utilice alternativas de actualización para este propósito.
jobin
¿Por qué no lo son? ¿Puede alguno de ustedes explicar por qué update-alternativesno es adecuado para Python? ¿Es por legacy.python.org/dev/peps/pep-0394 ?
Dmitry Grigoryev
11
Las alternativas son implementaciones diferentes para las mismas funcionalidades. python2 y python3 no proporcionan las mismas funcionalidades.
Ely
Puede hacer algo como esto si instaló manualmente (a través de ppa o lo que sea) otras versiones de python3. sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
David Baucum
Esto es lo que necesitaba hacer para un 18.04.2 vm que no viene con python. Gracias
Dark Star1
9

Ubuntu, y el resto de las distribuciones de Linux para el caso, todavía dependen en gran medida de Python 2.7 para una serie de aplicaciones y comandos. Si cambia la referencia predeterminada de "python" a Python 3.x, varias funciones de Python comenzarán a arrojar errores de aserción.

Por ejemplo, en Ubuntu, 'pip' para uno ya no se ejecutará correctamente a menos que edite directamente el archivo y cambie el shebang para hacer referencia a '#! / Usr / bin / env python2.7'. En los sabores RHEL (Red Hat Enterprise Linux) como Red Hat, Fedora y CentOS, el comando 'Yum' también depende de Python 2.7.

Mi punto aquí es que causaría que una cantidad significativa de código comience a arrojar errores de aserción solo para que pueda escribir 'python' en el terminal para hacer referencia a Python 3.x.

Es mucho mejor usar el comando 'python3' en la terminal y el shebang '#! / Usr / bin / env python3' en sus archivos de Python 3.x.

Distraído
fuente
2

Hacer

cd ~
gedit .bash_aliases

luego escribe cualquiera

alias python=python3

o

alias python='/usr/bin/python3'

Guarde el archivo, cierre el terminal y vuelva a abrirlo.
Enlazar

Brisa
fuente
1

Puede enlazar simbólicamente /usr/bin/pythona python3la

sudo ln -s /usr/bin/python3 /usr/bin/python

y puede evitar que Python 2 y pip2 se instalen como una dependencia con

sudo apt-mark hold python python-pip

Consulte las otras respuestas para saber por qué es posible que no desee hacer esto. Ubuntu 18.04+ ya no viene con Python 2, por lo que no debería ser tan malo.

Boris
fuente
2
Con respecto a "Ubuntu 18.04 ya no viene con Python 2, por lo que no debería ser tan malo". , en Ubuntu (incluso las versiones que no tienen Python 2 instalado por defecto), pythonse supone que un ejecutable llamado es Python 2, por lo que esto podría romper algunas cosas.
wjandrea
* python->/usr/bin/python
wjandrea
0
cat > /usr/local/bin/py
#!/bin/dash
python3 "$@"
<CTRL-D>

(siempre que tenga permiso de escritura para / usr / local / bin) de la misma manera

cat > /usr/local/bin/pyi
#!/bin/dash
python3 -i "$@"
<CTRL-D>

entonces solo escribe py (y usa py en #! líneas) para su python elegido.

John Allsup
fuente
¿No sería más sencillo usar un enlace simbólico? sudo ln -s /usr/bin/python3 /usr/local/bin/py
wjandrea
0

Me resulta muy útil simplemente eliminar / usr / bin / python y / usr / bin / pip. Esto obliga a todos los programas a confiar en los comandos "python2" y "python3".

Aunque algunos paquetes opcionales y obsoletos dependen del #!/usr/bin/pythontrabajo, prefiero enviar parches a esos programas que seguir cometiendo errores extraños y, a veces, difíciles de depurar.

Erik Aronesty
fuente
-1

Puede usar update-alternativespara proporcionar diferentes versiones de programas que pueden ser necesarios en diferentes momentos debido a problemas de compatibilidad.

Esta respuesta es un buen ejemplo de cómo configurar las cosas para mantener simultáneamente diferentes versiones de gcc / g ++, por ejemplo.

haz lo mismo con python2.7 y python 3.3

dcanelhas
fuente
2
Es posible que los usuarios principiantes no puedan adaptar fácilmente la respuesta vinculada a una situación diferente. Además de acreditar la respuesta anterior, sería bueno establecer los pasos necesarios para Python.
chaskes
Aquí es que encontré una buena solución paso a paso linuxconfig.org/…
woto
Python 2 y 3 no son alternativas, incluso las versiones menores diferentes no lo son ( por ejemplo ). Este método puede romper cosas fácilmente.
wjandrea
También este es un duplicado de esta respuesta
wjandrea