Pourquoi Python 2.7 est-il toujours la version Python par défaut dans Ubuntu?

32

Selon la documentation officielle de Python, la prise en charge de Python2.7 prendra fin à l'avenir.

DEPRECATION: Python 2.7 atteindra la fin de sa vie le 1er janvier 2020. Veuillez mettre à jour votre Python car Python 2.7 ne sera pas maintenu après cette date. Une future version de pip supprimera le support de Python 2.7. Plus de détails sur la prise en charge de Python 2 dans pip, peuvent être trouvés à https://pip.pypa.io/en/latest/development/release-process/#python-2-support

Pourquoi Ubuntu n'utilise-t-il pas Python3 par défaut dans leur prochaine version?

$ 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.
ラ ビ ナ ン ダ ン
la source
2
Vous pouvez installer le package python3.7. Le problème est que dans une version Ubuntu \ linux mint il y a parfois encore d'anciens logiciels, donc vous devez installer les nouveaux packages manuellement.
enigma
8
@enigma Ce n'est pas un double de cette question car python3 est déjà installé sur le système de ラ ビ ナ ン ダ ン par défaut, il a donc à la fois python et python3 installés côte à côte.
karel

Réponses:

40

Selon les notes de version de Bionic Beaver :

Python 2 n'est plus installé par défaut. Python 3 a été mis à jour en 3.6. Il s'agit de la dernière version de LTS à inclure Python 2 en principal.

Et la déclaration ci-dessus est vraie. Python 2 n'est pas installé par défaut dans 18.04 et les versions publiées après cela. Ubuntu a déjà déplacé presque tous ses projets de Python 2 à Python 3. Par exemple, selon les notes de publication de Disco Dingo :

Samba a été mis à jour vers la version 4.10.x, et l'un des grands changements est la prise en charge de python3 . Dans Disco, samba et ses dépendances sont tous en python3 seulement maintenant, à l'exception de tdb. tdb construit toujours un paquet python2, à savoir python-tdb, mais tous les autres, y compris samba lui-même, ne sont que python3.

De plus, avant même la sortie d'Ubuntu 18.04, Ubuntu / Canonical a commencé à demander aux développeurs de passer à Python 3 car la fin est proche . De Python - Ubuntu Wiki :

Tout le développement basé sur Ubuntu / Canonical devrait cibler Python 3 en ce moment, et tout le nouveau code devrait être uniquement en Python 3. Si vous ne pouvez pas le faire à cause de votre pile de dépendances, parlons-en.

Il semble que sur votre système Python 2 a été installé intentionnellement ou peut être une dépendance d'un autre package dont le développeur n'a pas migré vers Python 3. Vous pouvez vérifier les packages qui dépendent de Python 2 en exécutant,

apt rdepends python

La raison pour laquelle Python 2 est invoqué lors de pythonson exécution réside dans le point historique du PEP 394 - La commande "python" sur les systèmes de type Unix :

La pythoncommande doit toujours appeler Python 2 (pour éviter les erreurs difficiles à diagnostiquer lorsque le code Python 2 est exécuté sur Python 3).

Kulfy
la source
12
Pour clarifier le dernier point, Python 3 n'est pas rétrocompatible avec Python 2. Cela, et combiné avec le fait que Python 2 a plus de support de bibliothèque que Python 3, signifie qu'un grand nombre de développeurs ont toujours une dépendance directe sur Python 2. Python 3 est sorti depuis un moment maintenant, mais ce sont vraiment les bibliothèques qui sont la raison pour laquelle Python 2 est toujours aussi fortement utilisé, même s'il ne devrait même plus être pris en charge (si je me souviens bien, le support officiel s'est terminé en 2018). EDIT: le support officiel prend fin en 2020.
searchengine27
8
"... le fait que Python 2 ait plus de support de bibliothèque que Python 3 ..." - Avez-vous une source pour cela? Je rencontre rarement des bibliothèques qui ne prennent plus en charge Python 3, et en fait, certaines abandonnent la prise en charge de Python 2! (Par exemple, Django, un framework web Python populaire, n'a pas pris en charge Python 2 pour trois versions .) Votre déclaration était logique il y a cinq ans, mais aujourd'hui, je ne pense pas que vous puissiez faire cette généralisation sans la sauvegarder avec des statistiques .
marcelm
7
@ searchengine27 Je ne pense pas que le support de la bibliothèque soit un facteur. Le problème de compatibilité ascendante est que le monde est inondé de scripts aléatoires commençant par #!/usr/bin/pythonou équivalent, qui se briseraient s'il pythondevenait python3, alors que les scripts aléatoires qui dépendent de Python 3 sont plus susceptibles de commencer #!/usr/bin/python3.
James_pic
1
@ searchengine27 Il y a longtemps, quelqu'un a créé un site Web "Python3 wall of Shame" qui répertorie les dépendances les plus courantes et leur statut python3 (qui à l'époque était épouvantable). Cependant, cela fait des années maintenant qu'il a été remplacé par Python 3 Wall of Superpowers, car pratiquement toutes les dépendances courantes ont été migrées et les quelques-unes qui ne migraient pas sont mortes de toute façon (le site Web n'a pas été mis à jour depuis avril 2018, car maintenant tout est capable de python3).
Giacomo Alzetta
4
Juste un ajout: le fait que la Python Software Foundation cessera de maintenir Python 2 en 2020 ne signifie pas que Canonical cessera de maintenir Python 2 en 2020. En fait, l' intérêt d'utiliser une distribution Linux d'un fournisseur réputé est que tout les packages de la distribution (pour Debian / Ubuntu qui signifie le référentiel "principal") seront maintenus pendant toute la durée de vie de la version de distribution, quel que soit l'état de prise en charge du package amont d'origine. En d'autres termes, le package Python 2 dans Ubuntu 19.04 sera maintenu aussi longtemps que Ubuntu 19.04 l'est.
Jörg W Mittag
0

À ma connaissance, seul arch linux l'a fait: appeler à python3partir de la pythoncommande par défaut . Malgré la recommandation PEP 394 .

Il peut être modifié en /usr/binredéfinissant les liens entre python, pythonXet pythonX.Y. Mais préparez-vous à faire face à de nombreux bugs, car tous vos scripts python2 exigeront un shell bang explicite:

#!/usr/bin/env python2

Un shell bang qui est rarement utilisé dans les anciens scripts.

yota
la source