Почему 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 mint иногда встречаются старые программы, поэтому вы должны устанавливать новые пакеты вручную.
загадка

8
@enigma Это не дубликат этого вопроса, потому что python3 уже установлен в системе ラ ビ ナ ン ダ ン по умолчанию, поэтому у него и python, и python3 установлены рядом друг с другом.
Карел

Ответы:


40

Согласно примечаниям к выпуску Bionic Beaver :

Python 2 больше не устанавливается по умолчанию. Python 3 был обновлён до 3.6. Это последний выпуск LTS, включающий Python 2 в main.

И приведенное выше утверждение верно. Python 2 не установлен по умолчанию в 18.04 и выпущенных после него версиях. Ubuntu уже переместил почти все свои проекты с Python 2 на Python 3. Например, согласно примечаниям к выпуску Disco Dingo :

Samba была обновлена ​​до версии 4.10.x, и одно из важных изменений здесь - поддержка python3 . В Disco samba и ее зависимости теперь только на 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 - «питон» Command на Unix-подобных системах :

Команда pythonвсегда должна вызывать Python 2 (для предотвращения трудно диагностируемых ошибок при запуске кода Python 2 на Python 3).


12
Чтобы прояснить последний момент, Python 3 не имеет обратной совместимости с Python 2. Это и в сочетании с тем фактом, что Python 2 имеет больше библиотечной поддержки, чем Python 3, означает, что большое количество разработчиков по-прежнему имеют прямую зависимость от Python 2. Python 3 уже давно вышел, но на самом деле именно библиотеки являются причиной того, почему Python 2 все еще так активно используется, даже если его больше не нужно поддерживать (если я правильно помню, официальная поддержка закончилась 2018). РЕДАКТИРОВАТЬ: официальная поддержка заканчивается в 2020 году.
searchengine27

8
«... тот факт, что Python 2 имеет больше библиотечной поддержки, чем Python 3 ...» - У вас есть источник для этого? Я редко сталкиваюсь с библиотеками, которые не поддерживают Python 3, и фактически некоторые отказываются от поддержки Python 2! (Например, Django, популярный веб-фреймворк Python, не поддерживал Python 2 в течение трех выпусков .) Ваше заявление имело смысл пять лет назад, но сегодня я не думаю, что вы можете сделать такое общее обобщение, не подкрепляя его статистикой ,
Марсель

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

1
@ searchengine27 Давным-давно кто-то создал сайт «Стена позора 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.
Йорг Миттаг

0

Насколько мне известно, только arch 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.