Dlaczego Python 2.7 jest nadal domyślną wersją Python w Ubuntu?

32

Według oficjalnej dokumentacji Pythona obsługa Python2.7 zakończy się w niedalekiej przyszłości.

DEPRECACJA: Python 2.7 zakończy swoją działalność 1 stycznia 2020 r. Zaktualizuj swój Python, ponieważ po tej dacie Python 2.7 nie będzie obsługiwany. Przyszła wersja pipa porzuci obsługę Python 2.7. Więcej szczegółów na temat obsługi Python 2 w pipie można znaleźć na stronie https://pip.pypa.io/en/latest/development/release-process/#python-2-support

Dlaczego Ubuntu nie używa domyślnie Python3 w nadchodzącej wersji?

$ 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.
ラ ビ ナ ン ダ ン
źródło
2
Możesz zainstalować pakiet python3.7. Problem polega na tym, że w wersji miętowej Ubuntu \ linux czasami są jeszcze stare oprogramowanie, więc trzeba ręcznie instalować nowsze pakiety.
zagadka
8
@enigma To nie jest duplikat tego pytania, ponieważ python3 jest już domyślnie zainstalowany w systemie ラ ビ ナ ン ダ ン so, więc ma zainstalowane zarówno python, jak i python3 obok siebie.
karel

Odpowiedzi:

40

Według informacji o wydaniu Bionic Beaver :

Python 2 nie jest już domyślnie instalowany. Python 3 został zaktualizowany do wersji 3.6. To ostatnie wydanie LTS zawierające Python 2 w main.

I powyższe stwierdzenie jest prawdziwe. Python 2 nie jest instalowany domyślnie w 18.04 i późniejszych wersjach. Ubuntu przeniosło już prawie wszystkie swoje projekty z Python 2 do Python 3. Na przykład, zgodnie z informacjami o wydaniu Disco Dingo :

Samba została zaktualizowana do wersji 4.10.x, a jedną z dużych zmian tutaj jest obsługa python3 . W Disco samba i jej zależności są teraz python3, z wyjątkiem tdb. tdb nadal buduje pakiet python2, a mianowicie python-tdb, ale wszystkie pozostałe, łącznie z samą sambą, są tylko python3.

Co więcej, jeszcze przed wydaniem Ubuntu 18.04, Ubuntu / Canonical zaczął prosić programistów o przejście na Python 3, ponieważ koniec jest bliski . Z Python - Wiki Ubuntu :

Cały rozwój oparty na Ubuntu / Canonical powinien być teraz ukierunkowany na Python 3, a cały nowy kod powinien być przeznaczony tylko dla Python 3. Jeśli nie możesz tego zrobić ze względu na stos zależności, porozmawiajmy.

Wygląda na to, że w twoim systemie Python 2 został zainstalowany celowo lub może być zależny od jakiegoś innego pakietu, którego programista nie przeniósł się do Python 3. Możesz sprawdzić pakiety zależne od Python 2, uruchamiając,

apt rdepends python

Powodem, dla którego Python 2 jest wywoływany po pythonuruchomieniu, jest jeden z historycznych punktów PEP 394 - Komenda „python” w systemach uniksopodobnych :

pythonPolecenie powinno zawsze invoke Pythonie 2 (aby uniknąć trudnych do diagnozowania błędów, gdy kod Python 2 jest prowadzony na Pythonie 3).

Kulfy
źródło
12
Aby wyjaśnić ostatni punkt, Python 3 nie jest wstecznie kompatybilny z Python 2. To, w połączeniu z faktem, że Python 2 obsługuje więcej bibliotek niż Python 3, oznacza, że ​​duża liczba programistów nadal jest bezpośrednio zależna od Python 2. Python 3 istnieje już od jakiegoś czasu, ale tak naprawdę to biblioteki są powodem, dla którego Python 2 jest nadal tak mocno używany, nawet jeśli nie powinien być już obsługiwany (jeśli dobrze pamiętam, oficjalne wsparcie zakończyło się 2018). EDYCJA: oficjalne wsparcie kończy się w 2020 r.
Searchengine27
8
„... fakt, że Python 2 ma większą obsługę bibliotek niż Python 3 ...” - Czy masz na to źródło? Rzadko spotykam już biblioteki, które nie obsługują Python 3, a niektóre z nich rezygnują z obsługi Python 2! (Na przykład Django, popularny framework internetowy Pythona, nie wspierał Pythona 2 dla trzech wydań .) Twoje stwierdzenie miało sens pięć lat temu, ale dzisiaj nie sądzę, abyś mógł dokonać tak szerokiej uogólnienia bez poparcia go statystykami .
marcelm
7
@ searchengine27 Nie sądzę, że wsparcie biblioteki ma na to wpływ. Problemem związanym z kompatybilnością wsteczną jest to, że świat jest zalany losowymi skryptami rozpoczynającymi się od #!/usr/bin/pythonlub równoważnymi, które mogłyby się zepsuć, gdyby pythonstały się python3, podczas gdy losowe skrypty zależne od Python 3 są bardziej prawdopodobne, aby zacząć #!/usr/bin/python3.
James_pic
1
@ searchengine27 Dawno temu ktoś stworzył witrynę „Ściana wstydu w języku Python3”, w której wymieniono najczęstsze zależności i ich status w języku Python3 (który w tym czasie był fatalny). Jednak minęły lata, kiedy zmieniono go na Ścianę Supermocy w Pythonie 3, ponieważ praktycznie wszystkie migrowane zależności były praktycznie migrowane, a kilka, które nie były migrowane, i tak nie żyje (strona internetowa nie została zaktualizowana od kwietnia 2018 r., Ponieważ właściwie wszystko jest w stanie python3).
Giacomo Alzetta
4
Tylko jako dodatek: fakt, że Fundacja Python Software przestanie utrzymywać Python 2 w 2020 r. , Nie oznacza, że Canonical przestanie utrzymywać Python 2 w 2020 r. W rzeczywistości sednem korzystania z dystrybucji Linuksa od renomowanego dostawcy jest to, że wszystko pakiety w dystrybucji (dla Debian / Ubuntu, co oznacza, że ​​„główne” repozytorium) będzie utrzymywane przez cały okres istnienia wydania dystrybucji, niezależnie od statusu obsługi oryginalnego pakietu nadrzędnego. Innymi słowy, pakiet Python 2 w Ubuntu 19.04 będzie utrzymywany tak długo, jak jest Ubuntu 19.04.
Jörg W Mittag
0

O ile mi wiadomo, zrobił to tylko arch Linux: wywołać python3z domyślnego pythonpolecenia. Pomimo zalecenia PEP 394 .

Można to zmienić /usr/bin, ponownie definiując powiązania między python, pythonXa pythonX.Y. Ale bądź przygotowany na poradzenie sobie z wieloma błędami, ponieważ wszystkie twoje skrypty python2 będą wymagały wyraźnego wybuchu powłoki:

#!/usr/bin/env python2

Powłoka powłoki rzadko używana w starych skryptach.

yota
źródło