¿Por qué Python 3 no es el binario predeterminado de Python?


42

Escribo pythonen una ventana de terminal. Me sale Python 2.7 y no Python 3.5. Según los documentos, Python 3.5 debería venir precargado.


1
Si configura un entorno virtual usando: "python3 -m venv my-venv", desde cualquier terminal active ese entorno virtual llamando a "source ... / my-env / bin / enable", entonces python 3.5 será el por defecto en ese terminal. Puede verificar la versión predeterminada actual llamando a "python -V".
Craig Hicks

Si bien su respuesta es útil, le pregunté por qué. no como hacerlo y ese es el gran debate. aquí. ¿Por qué debería una versión anterior por defecto, en lugar de la versión actual?
givonz

1
¡Estás exactamente en lo cierto acerca de mi "comentario"! Por eso escribí un comentario y no una respuesta.
Craig Hicks

Respuestas:


56

No sé qué "documentos" estás leyendo ni qué dicen, pero /usr/bin/pythones solo un enlace simbólico a la versión predeterminada de python, en este caso 2.7, que es el resultado de simplemente escribir pythonen el terminal. Este es el resultado de PEP 394 que define que

  • Por el momento, todas las distribuciones deben garantizar que se pythonrefiere al mismo objetivo quepython2 .

type pythony file /usr/bin/pythonconfirmará esto.

La razón de esta disposición, aparte de la convención, es que el paquete fuente python-defaults en Xenial es la versión 2.7.11 , por lo que el enlace simbólico de python apunta a esta versión.

Para usar Python 3, debe ser explícito y escribir python3en la línea de comando, que se recomienda en caso de que necesite una versión específica, esto también se puede hacer con Python 2, escribiendo python2. Ubuntu incluye versiones de python 2 y 3 de forma predeterminada en todas las versiones actuales.

Hay planes para migrar todo a Python 3 y marcarlo como predeterminado.


Esto probablemente está rompiendo el complemento rhythmbox-zeitgeist que depende de zeitgeiigeist-python3 pero no pudo encontrarlo.
Khurshid Alam

2
Este es el documento que significa OP.
SaidbakR

10

Para obtener Python 3.5 REPL o ejecutar un script que sea compatible, escriba python3. Esto es para mantener la compatibilidad con todo el legado de python 2.x (que siempre ha estado y seguirá vinculado python).

El guión podría encontrar pythonsi configura un .desktoparchivo para él (en ~/.local/share/applications/), para abrir un terminal e iniciar REPL, por ejemplo. No hay un entorno de GUI REPL predeterminado para python, y las expectativas normales de la interfaz son que el usuario vaya al terminal.

Se habla de que Python 3.5 es el predeterminado: los mantenedores portan todos los scripts del sistema desde Python 2.x a Python 3.x, no que Python 3 reemplazaría a Python 2 en todos los casos.


Entonces, supongo que la pregunta correcta es, ¿cómo agrego python3 a mi ruta, para que se ejecute automáticamente?
givonz

quieres decir, ¿cómo consigues que los scripts de python se ejecuten como un programa compilado?
Andrew Keech

Gracias. simplemente escriba python3 en el símbolo del sistema.
givonz

2
AIUI qué hacer con / usr / bin / python a largo plazo sigue siendo una pregunta abierta. La mejor práctica para los scripts de python2 sería usar python2 explícitamente.
Peter Green

1
en lugar de usar #!/usr/bin/python3(o #!/usr/bin/python2) en scripts, mejor usar (solo para python, específicamente) #!/usr/bin/env python3si desea que sea remotamente portátil. En su mayor parte, esto es solo documentación, ya que en muchos casos se llamará usando de $ python3 your_pyprogram.pytodos modos.
michael

4

Asume que el Python predeterminado debería estar disponible como python. Esa suposición está mal.

En un sistema que viene con Python 3 "precargado" y sin Python 2, habrá solo python3y no python.

El código escrito para Python 3 siempre debe buscar un intérprete llamado python3. El código escrito para Python 2 históricamente se buscará python.

Puede llegar un momento en el tiempo, posiblemente dentro de décadas, en el que casi nadie recuerda Python 2, cuando pythonpodría comenzar a referirse python3. ¡Esto sería solo por conveniencia, y puede y no debe hacerse prematuramente, si es que lo hace! No hay prisa, por el siguiente impacto:

Los sistemas "antiguos" actuales no tendrán conocimiento python2, solo python, por lo que tiene mucho sentido mantener el código Python 2 en busca python. Esta es la razón por la cual pythondebería referirse a Python 2 para "mientras exista el código Python 2".

El nuevo código escrito para Python 2, si eso tiene sentido, puede buscar perfectamente python. También podría buscarlo python2, si está destinado a ejecutarse solo en sistemas conscientes de Python 3 y bien arreglados (que deberían ofrecer dicho enlace).

El beneficio del uso del código Python 2 python2sería que no necesita un toque adicional una vez que pythoncomienza a referirse python3, lo que podría nunca suceder, o una vez que pythondesaparezca, lo que podría o no suceder. (Eso podría hacerse realidad si el código de Python 2 se extingue después de que el hipotético Python 4 se vuelva popular con su intérprete python4. Porque dejar que apunte a uno python3o python4ambos sería confuso).


2

Python, ambas versiones 2.x, 3.x están disponibles. si llama a python porque apunta a python 2.x, cargará python 2.x

La imagen de abajo te ayudará.

ingrese la descripción de la imagen aquí


1
¿Cómo escribes el mismo comando y obtienes 2 resultados diferentes?
givonz

44
el resultado diferente de la segunda invocación de pythones usar <tab>para consultar el autocompletador, que luego genera las posibles permutaciones de python*y le devuelve a un nuevo indicador.
Andrew Keech

@ givonz, hmm usé la tecla TAB hermano. No es salida. Es posible un patrón binario.
rɑːdʒɑ

¿Voto negativo para qué?
rɑːdʒɑ

2
No voté en contra, pero creo que la respuesta debería explicar por qué los 2 primeros resultados son diferentes y cuál es el papel apt-cache, especialmente para los principiantes de Ubuntu.
AL

2

Python 3.x debería funcionar con 16.04 - En realidad, definitivamente FUNCIONARÁ. Tengo Ubuntu 14.04 y tengo Python 3.4.3. Todo lo que tienes que hacer para probarlo es escribir python3y debería decirte qué versión estás ejecutando.


2
Bueno, no llamaría usando una informática de SO. Y estrictamente hablando: Ubuntu es un sistema operativo basado en Linux y no basado en Unix.
magu_

Todavía tengo que entender la diferencia entre Linux y Unix, además de algunas instrucciones de comando y de manera diferente, pero con comandos muy redactados. aunque la interfaz gráfica de usuario es mucho más avanzada que la que veo en Solaris.
givonz

1
-1 Esto no aborda la pregunta de por qué .
David Foerster
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.