Почему нельзя просто взять и перейти на Python 3

Почему нельзя просто взять и перейти на Python 3

В начале 2020 года будет прекращена поддержка версии Python 2.7, и обновления по части безопасности приостановят. Несмотря на то, что об этих планах стало известно еще пять лет назад — в 2014 году Гвидо ван Россум, автор Python, лично призывал разработчиков и компании мигрировать на Python 3 — процесс адаптации новой версии идет медленно. В начале года около 60% пакетов, скачиваемых из The Python Package Index (PyPI), относились к версии 2.7. К сентябрю эта цифра уменьшилась до 40%, но, скорее всего, она не достигнет нуля до дедлайна.

В крупной компании внедрение нового фреймворка или переход на обновленную технологию всегда требует существенных ресурсов и времени. В некоторых случаях процесс затягивается на месяцы и даже годы. Это связано с массивной кодовой базой и большим числом зависимостей.

В Facebook начали переводить сервисы компании на Python 3 еще в 2014 году. На реализацию этого проекта ушел год — пришлось переписать значительное число библиотек и поправить тысячи регрессий. После этого инженеры компании взялись за Instagram — в этом случае переход занял десять месяцев. У Dropbox — миграция на Python 3 идет уже целых три года.

В некоторых компаниях действуют строгие правила согласования существенных технологических обновлений со службой безопасности. Иногда это подразделение регулирует даже загрузку PIP-пакетов. «Безопасников» беспокоит, что при переходе на Python 3 в сервисах начнут появляться критические уязвимости.

Действительно, в таких сферах, как банкинг и здравоохранение, цена ошибки может быть высокой. Так, в прошлом году британский TSB — в процессе внедрения новой IT-системы — столкнулся с багом, который вызвал сбой в работе системы мобильного банкинга. В результате 1,9 млн человек потеряли доступ к своим счетам. Организация до сих пор разбирается с последствиями и заявлениями от клиентов.

<i>Фото — </i><i><a href="https://unsplash.com/photos/D9Zow2REm8U" target="_blank" rel="noopener noreferrer nofollow">Hitesh Choudhary</a> </i><i>— Unsplash</i>Фото — Hitesh Choudhary — Unsplash

Python 2 до сих пор поддерживают ведущие ОС на базе Linux. Например, в RHEL пользователи могут переключаться между двумя версиями языка. При этом процедура не лишена багов, в основном связанных с работой указателей. В октябре похожую ошибку нашли в Debian. Поэтому здесь еще есть над чем работать.

Что думает сообщество

Резиденты Hacker News в тематическом треде отмечают, что главная причина медленной миграции — отсутствие (до недавнего времени) какой-либо ощутимой выгоды от этого процесса. В языке не было новых функций, которые могли бы заинтересовать разработчиков и подтолкнуть их к переходу на Python 3. При этом некоторые решения, сделанные авторами языка, наоборот, портили впечатление от программирования на нем. В частности, большую волну недовольства вызвало исключение поддержки байтовых строк и переход на работу с Unicode.

Специалисты из Stack Overflow также отмечают, что в экосистеме Python недоставало встроенных инструментов для автоматизированной трансляции кода с одной версии на другую. Проблему решили с появлением таких утилит, как 2to3 и six.

Отметим, что за последние годы функциональность Python 3 значительно расширилась. Добавили перемножение матриц, модуль asyncio для организации конкурентного программирования, а также аннотации типов переменных, полей класса, аргументов и возвращаемых значений функций. Поддержка Python 3 даже появилась для других популярных библиотек, например scikit-learn для ML.

Обновленный набор функций должен убедить компании перейти на следующую версию языка. И хотя число адептов Python 3 в следующем году значительно возрастет, еще долгое время будут встречаться компании, работающие с Python 2.7.