¿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?
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.
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.
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.
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.
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.
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.
¿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.
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.
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.
python
debe mantenerse como significadopython2
. 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.Respuestas:
Una forma segura y sencilla sería utilizar un alias. Coloque esto en
~/.bashrc
o~/.bash_aliases
archivo:Después de agregar lo anterior en el archivo, ejecute
source ~/.bashrc
osource ~/.bash_aliases
.Por ejemplo:
Para eludir el alias, use el
command
comando incorporado:Otra forma de eludir el alias es usarlo
\
antes del comando.Para deshabilitar el alias en el shell actual, use el
unalias
comando incorporado:fuente
[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 :
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_aliases
archivo (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:
o
Las secuencias de comandos aún deben usar algo como
#!/usr/bin/env python3
compatibilidad cruzada.Usar
env
es 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, algunosprogram.py
sin shebang podrían ejecutarse invocando al intérprete con alias de esta manerapython program.py
. El alias también puede ser útil para sistemas con múltiples versiones de python3 como 3.4 y 3.6 juntas.fuente
python
, no es realmente relevante hasta que se complete la conversión. Incluso entonces, puede convertirse en un problema.python3
en un shebang, nopython
.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
.Si obtiene el error "no hay alternativas para python", configure una alternativa usted mismo con el siguiente comando:
Cambie la ruta
/usr/bin/python3
a la versión de Python deseada en consecuencia.fuente
update-alternatives
no es adecuado para Python? ¿Es por legacy.python.org/dev/peps/pep-0394 ?sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
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.
fuente
Hacer
luego escribe cualquiera
o
Guarde el archivo, cierre el terminal y vuelva a abrirlo.
Enlazar
fuente
Puede enlazar simbólicamente
/usr/bin/python
apython3
lay puede evitar que Python 2 y pip2 se instalen como una dependencia con
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.
fuente
python
se supone que un ejecutable llamado es Python 2, por lo que esto podría romper algunas cosas.python
->/usr/bin/python
(siempre que tenga permiso de escritura para / usr / local / bin) de la misma manera
entonces solo escribe py (y usa py en #! líneas) para su python elegido.
fuente
sudo ln -s /usr/bin/python3 /usr/local/bin/py
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/python
trabajo, prefiero enviar parches a esos programas que seguir cometiendo errores extraños y, a veces, difíciles de depurar.fuente
Puede usar
update-alternatives
para 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
fuente