Срок службы Python 2 быстро приближается, и Национальный центр кибербезопасности Великобритании выпустил предупреждение разработчикам, все еще цепляющимся за Python 2, о рисках, с которыми они столкнутся в результате отсутствия исправлений ошибок или обновлений безопасности.
К большому разочарованию приверженцев Python 3, Python 2 был приостановлен Гвидо ван Россумом в 2014 году. Будучи непреклонным в том, что Python 2.8 не будет и что пришло время перейти на Python 3.4, он объявил на PyCon, что вместо того, чтобы прекратить поддержку в 2015 году, как первоначально планировалось, Python 2 будет предоставлен дополнительный срок в 5 лет до 2020 года. Это было сделано для того, чтобы дать время многочисленным библиотекам, на которые опираются существующие проекты, добавить поддержку Python 3.
В марте 2018 года было решено, что Python 2.7, единственная версия, которая все еще поддерживается, будет полностью отключена 1 января 2020 года, что означает отсутствие обновлений, даже исправлений безопасности только для исходного кода, после этой даты. И если вы думаете, что до 2020 года еще далеко — вы ошибаетесь:
В связи с этим приближающимся крайним сроком Национальный центр кибербезопасности (NCSC) повторил сообщение «время для перемещения Python 3», заявив::
Итак, если вы все еще используете 2.x, пришло время перенести ваш код на Python 3. Если вы продолжаете использовать неподдерживаемые модули, вы рискуете безопасностью своей организации и данных, так как рано или поздно появятся уязвимости, которые никто не исправляет.
Учитывая, что Python 3.0 был выпущен в декабре 2008 года и не был обратно совместим с линейкой выпусков 2.x, этот совет кажется давно назревшим. Но сообщество Python было очень устойчиво к изменениям. Потребовалось четыре года, до января 2013 года, то есть 4 года, чтобы количество ежемесячных загрузок последней версии Python 3 превысило количество ее аналогов Python 2.
Основным препятствием для переключения существующего кода с Python 2 на Python 3 была их зависимость от сторонних пакетов. Во время расширения EOL Python 2 все еще существовало значительное количество широко используемых библиотек, которые не поддерживали Python 3.x. Эта ситуация отслеживалась на веб-сайте, первоначально называвшемся Стеной стыда Python 3, поскольку он отображал красным цветом имена пакетов PyPI, которые не были совместимы с Python, используя зеленый для тех, кто это делал. Он был переименован в Python 3 Wall of Superpowers, поскольку все больше и больше зеленых записей заменили красные и, достигнув более 95% совместимости, прекратили упражнение в апреле 2018 года.
Несмотря на это, некоторые пользователи все еще цепляются за цифры Python 2.x. из опроса разработчиков Python 2018, проведенного совместно Python Software Foundation и JetBrains.покажите, что почти пятая часть разработчиков Python, занимающихся DevOps, застряла там, и почти столько же веб-разработчиков находятся в той же ситуации. Перспективы гораздо лучше для науки о данных, где только 10% еще не обновились.
Эти цифры выглядят достаточно обнадеживающими, но другая картина раскрывается по статистике загрузок популярных пакетов в июне 2019 года из индекса пакетов Python, собранного NCSC:
В четырех пакетах, перечисленных в верхней части таблицы, было больше загрузок для Python 2, чем для Python 3, и даже там, где Python 3 более популярен, значительная доля по-прежнему приходится на Python 2. Чтобы заставить эту ситуацию улучшиться, многие проекты, включая NumPy, Requests и TensorFlow, пообещали отказаться от поддержки 2.x к 2020 году, а некоторые уже сделали это. Как отмечает NCSC,
Это означает, что если вы хотите использовать новейшие функции ваших любимых модулей, вам нужно будет использовать Python 3. Чем дольше вы ждете обновления, тем больше версий ваших зависимостей Python 3 будут изменены, и тем сложнее будет обновление.
Еще один момент, поднятый NCSC, заключается в том, что неспособность двигаться дальше сдерживает других разработчиков, заявляя::
Если вы поддерживаете библиотеку, от которой зависят другие разработчики, вы можете запретить им обновление до 3. Сдерживая других разработчиков, вы косвенно и, вероятно, непреднамеренно увеличиваете риски безопасности других.
В нем также есть некоторые рекомендации, которые помогут в процессе переноса кода Python 2.x на Python 3, упоминая:
Могу ли я использовать Python 3 — программу, которая проверяет зависимости вашего проекта, чтобы узнать, не мешают ли вам использовать Python 3.
2to3 — программа на Python, обычно устанавливаемая с интерпретатором Python в качестве скрипта, которая пытается преобразовать исходный код 2.x в 3. Обратите внимание, что это не идеально, возможно, вам все равно придется исправить какой-то код вручную.
В Python 3 есть множество функций, которые вознаграждают тех, кто делает этот шаг, и при этом у вас также будет возможность улучшить управление зависимостями от программного обеспечения и свести к минимуму задолженность по безопасности.
Dropbox перенес свою кодовую базу на Python 3 в 2018 году и подробно рассказал об этом в своем блоге. Этот шаг был мотивирован тем фактом, что по мере старения Python 2 набор цепочек инструментов, изначально совместимых для его развертывания, в значительной степени устарел, что привело к растущей нагрузке на обслуживание:
Использование старых компиляторов/сред выполнения ограничивало нашу способность обновлять некоторые важные зависимости.
Например, мы используем Qt в Windows и Linux: последние версии Qt требуют более современных компиляторов из-за включения Chromium (через QtWebEngine).
Поскольку мы продолжали глубоко интегрироваться с операционной системой, наша неспособность полагаться на более поздние версии этих цепочек инструментов увеличила стоимость внедрения новых API.
Например, Python 2 по-прежнему технически требует Visual Studio 2008. Эта версия больше не поддерживается Microsoft и не совместима с Windows 10 SDK.