Чому Python 2.7 все ще є типовою версією Python в Ubuntu?


32

Згідно з офіційною документацією Python, підтримка Python2.7 закінчиться в майбутньому.

ВИЗНАЧЕННЯ: Python 2.7 закінчить своє життя 1 січня 2020 року. Будь ласка, оновіть ваш Python, оскільки Python 2.7 не буде підтримуватися після цієї дати. У майбутній версії pip випаде підтримка Python 2.7. Більш детальну інформацію про підтримку Python 2 у pip можна знайти за посиланням https://pip.pypa.io/en/latest/development/release-process/#python-2-support

Чому Ubuntu не використовує 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.

2
Ви можете встановити пакет python3.7. Проблема полягає в тому, що у версії монетного двору ubuntu \ linux іноді є старі програмні засоби, тому нові пакети доведеться встановлювати вручну.
загадка

8
@enigma Це не дублікат цього питання, оскільки python3 вже встановлений у системі ラ ビ ナ ン ダ ン за замовчуванням, тому у нього встановлені і python, і python3 поряд.
карел

Відповіді:


40

Відповідно до приміток до випуску Bionic Beaver :

Python 2 більше не встановлений за замовчуванням. Python 3 оновлено до 3.6. Це останній випуск LTS, який включає Python 2 в основному.

І наведене твердження вірно. Python 2 не встановлений за замовчуванням у 18.04, а версії випущені після цього. Ubuntu вже перемістив майже всі свої проекти з Python 2 на Python 3. Наприклад, згідно з повідомленнями про випуск Disco Dingo :

Samba було оновлено до версії 4.10.x, і одна з великих змін тут - підтримка python3 . У Disco, самба та її залежності тепер всі python3, за винятком tdb. tdb все ще створює пакет python2, а саме python-tdb, але всі інші, включаючи сам сам, є лише python3.

Більше того, ще до випуску Ubuntu 18.04, Ubuntu / Canonical почали просити розробників перейти на Python 3, тому що кінець вже близький . Від Python - Ubuntu Wiki :

Весь розробник, керований Ubuntu / Canonical, повинен орієнтуватися на Python 3 зараз, а весь новий код повинен бути лише Python 3. Якщо ви не можете цього зробити через свій набір залежностей, давайте поговоримо.

Здається, що у вашій системі Python 2 був встановлений навмисно або може бути залежністю від іншого пакету, розробник якого не перейшов на Python 3. Ви можете перевірити пакунки, які залежать від Python 2, запустивши,

apt rdepends python

Причина, чому Python 2 викликається при pythonзапуску, лежить в одній з історичних точок PEP 394 - Команді "python" у Unix-Like System :

pythonКоманда повинна завжди Invoke Python 2 (для запобігання важкодоступних діагностують помилки , коли Python 2 коду виконується на Python 3).


12
Для уточнення підсумкового пункту Python 3 не сумісний із Python 2. Це в поєднанні з тим, що Python 2 має більшу підтримку бібліотеки, ніж Python 3, означає, що велика кількість розробників все ще має пряму залежність від Python 2. Python 3 вже деякий час не працює, але насправді саме бібліотеки є причиною того, чому Python 2 все ще настільки сильно використовується, хоча він навіть не повинен підтримуватися більше (якщо я правильно пам’ятаю, офіційна підтримка закінчилася 2018). EDIT: офіційна підтримка закінчується в 2020 році.
searchchengine27

8
"... факт, що Python 2 має більшу підтримку бібліотеки, ніж Python 3 ..." - Чи є у вас джерело для цього? Я рідко стикаюся з бібліотеками, які не підтримують Python 3, а насправді деякі припиняють підтримку Python 2! (Наприклад, Django, популярна веб-рамка Python, не підтримує Python 2 протягом трьох версій .) Ваша заява мала сенс п’ять років тому, але сьогодні я не думаю, що ви зможете зробити це загальне узагальнення, не підкріплюючи його статистикою. .
marcelm

7
@ searchchengine27 Я не думаю, що підтримка бібліотеки впливає на це. Проблема зворотної сумісності полягає в тому, що світ переповнений випадковими сценаріями, які починаються з #!/usr/bin/pythonеквівалентних сценаріїв , які б розірвалися, якщо pythonстали python3, тоді як випадкові сценарії, які залежать від Python 3, швидше починаються #!/usr/bin/python3.
James_pic

1
@ searchchengine27 Давним-давно хтось створив веб-сайт "Python3 стіни сорому", в якому перераховані найпоширеніші залежності та їхній статус python3 (який на той час був негідним). Однак минули роки, коли він був змінений на Python 3 Wall of Superpowers, оскільки практично всі загальні залежності були перенесені, а ті, хто не мігрував, так чи інакше мертві (веб-сайт не оновлювався з квітня 2018 року, оскільки в основному все є python3-здатний).
Джакомо Альзетта

4
Подібно до того , як додаток: той факт , що Фонд Python Software припинить підтримувати Python 2 в 2020 році , не означає , що Canonical припинить підтримувати Python 2 в 2020. Насправді, весь сенс використання Linux розподілу від авторитетного виробника є те , що всі пакети в дистрибутиві (для Debian / Ubuntu, що означає "основний" сховище) будуть підтримуватися протягом усього життя випуску дистрибутива незалежно від статусу підтримки вихідного пакета вище. Іншими словами, пакет Python 2 в Ubuntu 19.04 буде підтримуватися до тих пір, поки є Ubuntu 19.04.
Йорг W Міттаг

0

Наскільки мені відомо, це робило тільки арка Linux: дзвонити python3з команди за замовчуванням python. Незважаючи на рекомендацію PEP 394 .

Він може бути змінений в /usr/binперевизначенні зв'язку між python, pythonXі pythonX.Y. Але будьте готові впоратися з великою кількістю помилок, оскільки всі ваші всі сценарії python2 матимуть явний вибух оболонки:

#!/usr/bin/env python2

Оболонка, яка рідко використовується в старих сценаріях.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.