Warum ist Python 2.7 immer noch die Standard-Python-Version in Ubuntu?

32

Laut offizieller Dokumentation von Python wird der Python2.7-Support in naher Zukunft eingestellt.

VERRINGERUNG: Python 2.7 wird am 1. Januar 2020 das Ende seines Lebens erreichen. Bitte aktualisieren Sie Ihr Python, da Python 2.7 nach diesem Datum nicht mehr gewartet wird. Eine zukünftige Version von pip wird die Unterstützung für Python 2.7 einstellen. Weitere Informationen zur Python 2-Unterstützung in pip finden Sie unter https://pip.pypa.io/en/latest/development/release-process/#python-2-support

Warum verwendet Ubuntu in der kommenden Version nicht standardmäßig Python3?

$ 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.
ラ ラ ナ ン ン ダ
quelle
2
Sie können das Paket python3.7 installieren. Das Problem ist, dass es in einer Ubuntu \ Linux Mint-Version manchmal noch alte Software gibt, so dass Sie die neueren Pakete manuell installieren müssen.
Rätsel
8
@enigma Es ist kein Duplikat dieser Frage, da python3 bereits standardmäßig auf dem System von ラ ラ ビ ン ン ダ installiert ist, sodass sowohl python als auch python3 nebeneinander installiert sind.
Karl

Antworten:

40

In den Versionshinweisen von Bionic Beaver heißt es :

Python 2 wird nicht mehr standardmäßig installiert. Python 3 wurde auf 3.6 aktualisiert. Dies ist die letzte LTS-Version, in der Python 2 in main enthalten ist.

Und die obige Aussage ist wahr. Python 2 ist in 18.04 und den darauf folgenden Versionen nicht standardmäßig installiert. Ubuntu hat bereits fast alle Projekte von Python 2 auf Python 3 verschoben. So lauten beispielsweise die Versionshinweise von Disco Dingo :

Samba wurde auf Version 4.10.x aktualisiert und eine der großen Änderungen hier ist die Python3- Unterstützung. In Disco sind Samba und seine Abhängigkeiten mit Ausnahme von tdb nur noch Python3. tdb erstellt immer noch ein python2-Paket, nämlich python-tdb, aber alle anderen, einschließlich Samba, sind nur python3.

Darüber hinaus forderte Ubuntu / Canonical die Entwickler bereits vor der Veröffentlichung von Ubuntu 18.04 auf, auf Python 3 umzusteigen, da das Ende nah ist . Aus Python - Ubuntu Wiki :

Alle Ubuntu / Canonical-Entwicklungen sollten jetzt auf Python 3 abzielen, und der gesamte neue Code sollte nur Python 3 sein. Wenn Sie dies aufgrund Ihres Abhängigkeitsstapels nicht tun können, lassen Sie uns darüber sprechen.

Es scheint, dass Python 2 absichtlich auf Ihrem System installiert wurde oder als Abhängigkeit von einem anderen Paket fungiert, dessen Entwickler nicht zu Python 3 gewechselt ist. Sie können die Pakete überprüfen, die von Python 2 abhängig sind, indem Sie Folgendes ausführen:

apt rdepends python

Der Grund, warum Python 2 aufgerufen wird, wenn pythones ausgeführt wird, liegt im historischen Punkt von PEP 394 - Der "Python" -Befehl auf Unix-ähnlichen Systemen :

Der pythonBefehl sollte immer Python 2 aufrufen (um schwer zu diagnostizierende Fehler zu vermeiden, wenn Python 2-Code unter Python 3 ausgeführt wird).

Kulfy
quelle
12
Um den letzten Punkt zu verdeutlichen, ist Python 3 nicht abwärtskompatibel mit Python 2. Dies und die Tatsache, dass Python 2 mehr Bibliotheksunterstützung als Python 3 bietet, bedeuten, dass eine große Anzahl von Entwicklern immer noch eine direkte Abhängigkeit von Python 2 hat. Python 3 ist schon eine Weile nicht mehr verfügbar, aber eigentlich sind es die Bibliotheken, die dafür verantwortlich sind, dass Python 2 immer noch so stark genutzt wird, auch wenn es nicht mehr unterstützt werden sollte (wenn ich mich recht erinnere, endete der offizielle Support mit 2018). BEARBEITEN: offizielle Unterstützung endet im Jahr 2020.
Suchmaschine27
8
"... die Tatsache, dass Python 2 mehr Bibliotheksunterstützung bietet als Python 3 ..." - Haben Sie eine Quelle dafür? Ich stoße selten mehr auf Bibliotheken, die Python 3 nicht unterstützen, und in der Tat unterstützen einige Python 2 nicht mehr! (Django, ein beliebtes Python-Webframework, hat Python 2 in drei Releases nicht unterstützt .) Ihre Aussage war vor fünf Jahren sinnvoll, aber heute können Sie diese umfassende Verallgemeinerung nicht durchführen, ohne sie mit Statistiken zu sichern .
Marcelm
7
@ searchengine27 Ich glaube nicht, dass Bibliotheksunterstützung Einfluss darauf hat. Die Rückwärtskompatibilität Sorge ist , dass die Welt überschwemmt mit zufälligen Skripte, die mit Start #!/usr/bin/pythonoder gleichwertig, die brechen würde , wenn pythonwurde python3, während zufällige Skripte , die 3 auf Python hängen eher mit zu beginnen #!/usr/bin/python3.
James_pic
1
@ searchengine27 Vor langer Zeit hat jemand eine "Python3 Wall of Shame" -Website erstellt, auf der die häufigsten Abhängigkeiten und ihr Python3-Status (der zu dieser Zeit miserabel war) aufgelistet sind. Es ist jedoch Jahre her, dass es zu Python 3 Wall of Superpowers geändert wurde, da praktisch alle gängigen Abhängigkeiten migriert wurden und die wenigen, die nicht migriert wurden, sowieso tot sind (die Website wurde seit April 2018 nicht aktualisiert, da jetzt im Grunde alles ist python3-fähig).
Giacomo Alzetta
4
Nur als Ergänzung: die Tatsache , dass die Python Software Foundation Python stoppen 2 im Jahr 2020 beibehalten wird, bedeutet nicht , dass Canonical Python stoppen 2 im Jahr 2020. In der Tat Aufrechterhaltung der ganze Punkt eine Linux verwendet Verteilung von einem seriösen Anbieter ist , dass alle Pakete in der Distribution (für Debian / Ubuntu bedeutet das "Haupt" -Repository) werden für die gesamte Lebensdauer der Distributionsversion beibehalten, unabhängig vom Support-Status des ursprünglichen Upstream-Pakets. Mit anderen Worten, das Python 2-Paket in Ubuntu 19.04 wird so lange beibehalten, wie Ubuntu 19.04 es ist.
Jörg W Mittag
0

Meines Wissens hat es nur Arch Linux getan: python3Vom Standardbefehl aus aufzurufen python. Trotz der PEP 394 Empfehlung.

Es kann in geändert werden /usr/bindurch eine Neudefinition der Beziehungen zwischen python, pythonXund pythonX.Y. Aber seien Sie darauf vorbereitet, mit vielen Fehlern fertig zu werden, da alle Ihre Python2-Skripte einen expliziten Shell-Knall erfordern:

#!/usr/bin/env python2

Ein Shell-Knall, der in alten Skripten selten verwendet wird.

yota
quelle