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

El python el comando de programa ejecuta Python 2. Python 3 se puede ejecutar usando el python3 comando. Cómo se puede ejecutar Python 3 usando el python ¿mando?

Puede instalar un paquete para todo el sistema:

$ sudo apt install python-is-python3

Ver advertencias:python-es-paquete python3 en Ubuntu 20.04 - ¿qué es y qué hace realmente?

Una forma sencilla y segura sería utilizar un alias. Coloque esto en ~/.bashrc o ~/.bash_aliases file:

alias python=python3

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

Por ejemplo:

$ python --versionPython 2.7.6$ python3 --versionPython 3.4.3$ alias python=python3$ python --versionPython 3.4.3

Para eludir el alias, use el command comando incorporado:

$ command python --versionPython 2.7.6

Otra forma de eludir el alias es usar \ antes de la orden.

$ \python --version Python 2.7.6

Para deshabilitar el alias en el shell actual, use el unalias comando incorporado:

$ unalias python$ python --versionPython 2.7.6

En Ubuntu 20.04+ simplemente instale el python-is-python3 paquete:

sudo apt install python-is-python3

Además de eso, puede evitar que Python 2 se instale como una dependencia de algo en el futuro con apt-mark hold:

sudo apt-mark hold python2 python2-minimal python2.7 python2.7-minimal libpython2-stdlib libpython2.7-minimal libpython2.7-stdlib 

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


Desde el Ubuntu wiki:

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

Qué es esto no significar:

  • /usr/bin/python apuntará a Python 3. No, esto no va a suceder (excepto PEP 394 aboga por lo contrario, lo que es dudoso para el futuro previsible). /usr/bin/python y /usr/bin/python2 apuntará a Python 2.7 y /usr/bin/python3 apuntará 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 upstream 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 predeterminada y preferida de Python en las distribuciones".


Para uso de CLI, como @ Radu Radeanu, Recomendaría poner un alias en el nombre del usuario ~/.bashrc, .bash_aliases archivo (los diferentes archivos, incluyendo ~/.bash_profile, se cargan al menos una vez, son principalmente para fines organizativos, pero pueden variar según la plataforma). Pitón entornos virtuales también funcionan bien.

Ejemplos de alias:

alias python=python3

o

alias python='/usr/bin/python3'

Los scripts aún deberían usar algo como #!/usr/bin/env python3 para compatibilidad cruzada.

Utilizar 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 de usuario. Por lo tanto, no están disponibles para el shebang (#!). Si prefiere el alias python=python3, entonces algunos program.py sin un shebang, se podría ejecutar invocando el 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.

Actualización: Esta es la forma incorrecta, he aprendido, ya que Python2 y Python3 no son intercambiables.

Puede probar la herramienta de línea de comandos update-alternatives.

$ sudo update-alternatives --config python

Si aparece 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

Cambiar la ruta /usr/bin/python3 a su versión de Python deseada en consecuencia.

Ubuntu, y el resto de las distribuciones de Linux, siguen dependiendo 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, entonces una serie de funciones de Python comenzarán a lanzar errores de aserción.

Por ejemplo, en Ubuntu, 'pip' para uno ya no corren correctamente a menos que editar directamente el archivo y cambiar el proceso para hacer referencia a '#!/usr / bin / env python2. 7'. En los sabores de 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 la 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 su Python 3.expediente X.

Hacer

cd ~gedit .bash_aliases

a continuación, escriba

alias python=python3

o

alias python='/usr/bin/python3'

Guarde el archivo, cierre el terminal y ábralo de nuevo.
Enlace

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 de #!/usr/bin/python para trabajar, prefiero enviar parches a esos programas que seguir cometiendo errores extraños y, a veces, difíciles de depurar.

cat > /usr/local/bin/py << 'EOF'#!/bin/dashpython3 "$@"EOF

(siempre que tenga permiso de escritura en /usr / local / bin).

cat > /usr/local/bin/pyi << 'EOF'#!/bin/dashpython3 -i "$@"EOF

entonces solo escribes py (y usas py en #! líneas) para su pitón elegido.

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 que /usr / bin / python sea compatible con python 2.x.

En otra nota, cualquiera que venga aquí porque está tratando de aprender a hacer de Python 3 su predeterminado, puede encontrar uso en la investigación de entornos virtuales (por ejemplo, virtualenv) o contenedores (por ejemplo, LXC o Docker).

@wjandrea, sí, incluso en un entorno virtual 'python' debe mantenerse comopython2`. 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.

Ah, ahora entiendo lo que querías decir con actualización… En realidad, los desarrolladores de Ubuntu están trabajando en eso: Python/3 - Ubuntu Wiki “Es un objetivo de lanzamiento para Ubuntu 14.04 LTS tener solo Python 3 en las imágenes de CD de escritorio.”

En referencia a la advertencia de soulsource en la parte superior, consulte [PEP 394] (PEP 394 – The “python” Command on Unix-Like Systems | peps.python.org) que estandariza las convenciones de nomenclatura para ejecutables de Python coexistentes y en las que los programadores y mantenedores de paquetes de Python confían (y deberían confiar).

`sudo apt install python-is-python3 '( para Ubuntu 20.04+)

@soulsource, sí soy consciente de eso. es por eso que pregunté si hay una opción de" actualización " disponible o no.

Creo que la respuesta de Radu Rădeanu ya está bastante cerca de la solución óptima. Solo se aplica a un usuario, y solo está en efecto para ejecutar python directamente escribiendo el comando python, sin afectar a los programas con un #!/usr / bin / python shebang.

@soulsource eso es lo que estoy buscando! :slight_smile: gracias!

@Kevin Acabo de intentar usar un virtualenv, pero tan pronto como abrí Gedit desde la terminal, recibí un montón de errores porque sus complementos parecen necesitar Python 2. Problemas similares podrían ocurrir con cualquier otro software que dependa de que el comando python sea Python 2.