¿Por qué Python 2.7 sigue siendo la versión predeterminada de Python en Ubuntu?

32

Según la documentación oficial de Python, el soporte de Python2.7 terminará en el futuro.

DEPRECACIÓN: Python 2.7 llegará al final de su vida el 1 de enero de 2020. Actualice su Python ya que Python 2.7 no se mantendrá después de esa fecha. Una versión futura de pip dejará de ser compatible con Python 2.7. Puede encontrar más detalles sobre el soporte de Python 2 en pip en https://pip.pypa.io/en/latest/development/release-process/#python-2-support

¿Por qué Ubuntu no usa Python3 como predeterminado en su próxima versión?

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="19.04 (Disco Dingo)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 19.04"
VERSION_ID="19.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=disco
UBUNTU_CODENAME=disco
$ python
Python 2.7.16 (default, Apr  6 2019, 01:42:57) 
[GCC 8.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
ラ ビ ナ ン ダ ン
fuente
2
Puede instalar el paquete python3.7. El problema es que dentro de una versión ubuntu \ linux mint a veces todavía hay softwares antiguos, por lo que debe instalar los paquetes más nuevos manualmente.
enigma
8
@enigma No es un duplicado de esa pregunta porque python3 ya está instalado en el sistema de ラ ビ ナ ン ダ ン de forma predeterminada, por lo que tiene tanto python como python3 instalados uno al lado del otro.
karel

Respuestas:

40

De acuerdo con las notas de lanzamiento de Bionic Beaver :

Python 2 ya no está instalado por defecto. Python 3 se ha actualizado a 3.6. Esta es la última versión de LTS que incluye Python 2 en main.

Y la afirmación anterior es cierta. Python 2 no está instalado por defecto en 18.04 y las versiones lanzadas después de eso. Ubuntu ya ha movido casi todos sus proyectos de Python 2 a Python 3. Por ejemplo, según las notas de lanzamiento de Disco Dingo :

Samba se actualizó a la versión 4.10.x, y uno de los grandes cambios aquí es la compatibilidad con python3 . En Disco, samba y sus dependencias son todas python3 solo ahora, con la excepción de tdb. tdb todavía construye un paquete python2, es decir, python-tdb, pero todos los demás, incluido el propio samba, son solo python3.

Además, incluso antes del lanzamiento de Ubuntu 18.04, Ubuntu / Canonical comenzó a pedir a los desarrolladores que se mudaran a Python 3 porque el final está cerca . Desde Python - Ubuntu Wiki :

Todo el desarrollo impulsado por Ubuntu / Canonical debe estar dirigido a Python 3 en este momento, y todo el código nuevo debe ser solo de Python 3. Si no puede hacer esto debido a su pila de dependencias, hablemos.

Parece que en su sistema Python 2 se instaló intencionalmente o puede ser una dependencia de algún otro paquete cuyo desarrollador no se haya movido a Python 3. Puede verificar los paquetes que dependen de Python 2 ejecutando,

apt rdepends python

La razón por la cual se invoca Python 2 cuando pythonse ejecuta radica en el punto histórico de PEP 394: el comando "python" en sistemas tipo Unix :

El pythoncomando siempre debe invocar Python 2 (para evitar errores difíciles de diagnosticar cuando el código Python 2 se ejecuta en Python 3).

Kulfy
fuente
12
Para aclarar el punto final, Python 3 no es compatible con Python 2. Eso, y combinado con el hecho de que Python 2 tiene más soporte de biblioteca que Python 3, significa que una gran cantidad de desarrolladores aún dependen directamente de Python 2. Python 3 ha estado fuera por un tiempo ahora, pero realmente son las bibliotecas las que explican por qué Python 2 todavía se usa con tanta fuerza, a pesar de que ya ni siquiera debería ser compatible (si no recuerdo mal, el soporte oficial terminó en 2018) EDITAR: el soporte oficial termina en 2020.
searchengine27
8
"... el hecho de que Python 2 tiene más soporte de biblioteca que Python 3 ..." - ¿Tiene una fuente para eso? ¡Raramente encuentro bibliotecas que no admiten Python 3, y de hecho, algunos dejan de admitir Python 2! (Por ejemplo, Django, un popular marco web de Python, no ha admitido Python 2 en tres versiones ). Su declaración tenía sentido hace cinco años, pero hoy no creo que pueda hacer esa generalización general sin respaldarla con estadísticas .
marcelm
77
@ searchengine27 No creo que los factores de soporte de la biblioteca lo incluyan. La preocupación de la compatibilidad con versiones anteriores es que el mundo está inundado de scripts aleatorios que comienzan con #!/usr/bin/pythono equivalentes, que se romperían si se pythonconvirtieran python3, mientras que los scripts aleatorios que dependen de Python 3 tienen más probabilidades de comenzar #!/usr/bin/python3.
James_pic
1
@ searchengine27 Hace mucho tiempo, alguien creó un sitio web "El muro de la vergüenza de Python3" que enumeraba las dependencias más comunes y su estado de python3 (que en ese momento era abismal). Sin embargo, hace años que se ha cambiado a Python 3 Wall of Superpowers, ya que prácticamente todas las dependencias comunes se han migrado y las pocas que no estaban migrando están muertas de todos modos (el sitio web no se ha actualizado desde abril de 2018 desde ahora, básicamente todo es capaz de python3).
Giacomo Alzetta
44
Solo como una adición: el hecho de que Python Software Foundation dejará de mantener Python 2 en 2020 no significa que Canonical dejará de mantener Python 2 en 2020. De hecho, el objetivo de usar una distribución de Linux de un proveedor acreditado es que todos Los paquetes en la distribución (para Debian / Ubuntu, que significa el repositorio "principal") se mantendrán durante toda la vida útil de la versión de distribución, independientemente del estado de soporte del paquete original original. En otras palabras, el paquete Python 2 en Ubuntu 19.04 se mantendrá mientras lo sea Ubuntu 19.04.
Jörg W Mittag
0

Que yo sepa, solo arch linux lo hizo: llamar python3desde el pythoncomando predeterminado . A pesar de la recomendación PEP 394 .

Se puede cambiar /usr/binredefiniendo los enlaces entre python, pythonXy pythonX.Y. Pero prepárese para hacer frente a muchos errores, ya que todos sus scripts de python2 exigirán tener una explosión explícita de shell:

#!/usr/bin/env python2

Una explosión de shell que rara vez se usa en scripts antiguos

Yota
fuente