Приблизительно через 3 недели истекает срок поддержки Python 3.6. Больше никаких исправлений багов и безопасности. При этом сегодня 15% пакетов, загруженных с PyPI, предназначены для Python 3.6. Подробности под катом.


Обновление может повлечь за собой и некоторые другие изменения, поэтому рассмотрим некоторые связанные с этим вопросы, в частности сосредоточившись на дистрибутивах Linux с долгосрочной поддержкой (LTS — Long-Time Support). Я буду во всем полагаться на очень полезный сайт endoflife.date.

Что это значит?

Python 3.6 выпущен в декабре 2016 года, 5 лет назад. Из PEP 494 следует, что:

  • первые два года выпуски исправлений ошибок и исправлений безопасности выходили каждые 3 месяца;

  • после этого релизы происходили по мере необходимости;

  • релизы прекратятся через 5 лет после выхода 3.6.

Декабрь 2021 года — последний месяц, когда будет выпущен Python 3.6. Начиная с января 2022 года, если есть критическая ошибка безопасности, она не будет исправлена командой разработчиков Python.

«Но я на Linux, обновляться не нужно»

Некоторые дистрибутивы Linux гарантируют долгосрочную поддержку в течение известного периода, включая исправление ошибок безопасности. Если вы используете один из этих дистрибутивов, и он содержит Python 3.6, вы можете рассчитывать на то, что дистрибутив предоставит исправления безопасности, даже если команда разработчиков Python этого не сделает. Теоретически вам пока не нужно обновлять систему. Но на практике есть подводные камни.

Старые версии дистрибутива со временем перестанут поддерживаться:

  • Ubuntu 18.04 прекращает обновления безопасности в апреле 2023-го.

  • RHEL 7 прекращает обновления безопасности в июне 2024 года.

Хотя вы будете получать обновления безопасности, вы не обязательно получите другие исправления ошибок. И Ubuntu 18.04, и RHEL 7 сейчас ограничиваются обновлениями безопасности.

Ваши зависимости перестанут получать обновления. Сторонние библиотеки и фреймворки Python начнут отказываться от поддержки Python 3.6. А это значит, что если в этих библиотеках есть критическая ошибка, то исправление может быть недоступно в Python 3.6, а ваш дистрибутив Linux очень не любит делать бэкпорты для всех существующих библиотек Python.

Это происходит в мире Java, где обновление до версии log4j с исправлением критической ошибку безопасности требует достаточно новой версии Java. Если вы не обновились, у вас проблемы.

«Но я на Ubuntu 20.04/RHEL 8, у меня много времени»

Если вы работаете на новом дистрибутиве Linux с LTS, то у вас есть ещё столько лет исправлений безопасности и багов в Python 3.6. Но по-прежнему существуют две проблемы:

  • сокращение поддержки: команды дистрибутивов Linux ограничены во времени, а также имеют не столь богатый опыт по сравнению с командой разработчиков Python. Я уверен, что критические исправления будут внесены, но случайные раздражители останутся;

  • сторонние зависимости перестанут получать обновления. LTS Linux здесь не поможет, за исключением случаев, когда вы работаете только с зависимостями из дистрибутива.

Дело в том, что и Ubuntu 20.04, и RHEL 8 сейчас поставляют Python 3.9. Вы можете обновить систему, не меняя дистрибутив Linux или способ установки Python. Просто выполните apt-get install python3.9 или dnf install python 3.9. Есть пакет Python 3.8, он может быть полезен как промежуточный.

Обновления

В краткосрочной перспективе ваша задача — как можно скорее перейти на поддерживаемые версии ваших зависимостей.

В целом выпуски Python 3 обратно совместимы. Поэтому теоретически вы можете просто перейти на версию 3.7, исправить все ошибки, затем перейти на версию 3.8, и так до Python 3.9 или, после января 2022, Python 3.10.

Проблема заключается в том, что библиотеки, от которых вы будете зависеть, перестанут поддерживать старые версии Python. Посмотрим на Django, вот таблица поддержки версий и endoflife.date/django:

  • Django 2.2 (LTS) будет получать исправления безопасности до апреля 2022 года и поддерживает Python 3.5–3.9.

  • Django 3.2 (LTS) имеет исправления безопасности до апреля 2024 года и поддерживает Python 3.6–3.10.

  • Последний релиз — Django 4.0, он поддерживает Python 3.8–3.10.

Если вы используете Django 2.2, у вас есть 3 месяца, чтобы перейти на Django 3.2. А если вы всё ещё на Python 3.5, то у вас ещё больше проблем: Django 3.2 его не поддерживает. Если вы работаете на Django 3.x, просто убедитесь, что вы на Django 3.2 и всё в порядке.

Апгрейд: долгосрочно

В конце концов Python 3.9 перестанет получать обновления. Django 3.2 перестанет получать обновления. Ubuntu 20.04 и RHEL 8 также перестанут получать обновления.

Если вы откладываете обновление до последней минуты, то оно станет мучительным, потому что вам придётся вносить большое количество серьёзных изменений сразу. И если вы в декабре 2021 года всё ещё на Python 3.6, то это признак организационной проблемы. Следующим шагом должно стать создание процесса, который будет обновлять ваши зависимости регулярно.

Научиться плотно работать с Python вы сможете на наших курсах:

Узнайте подробности акции.

Другие профессии и курсы

Комментарии (25)


  1. kovserg
    14.12.2021 19:25
    +1

    В целом выпуски Python 3 обратно совместимы. Поэтому теоретически вы можете просто перейти на версию 3.7, исправить все ошибки, затем перейти на версию 3.8, и так до Python 3.9
    Да но есть нюансы:
    Python 3.9.0 cannot be used on Windows 7 or earlier.
    Python 3.5.0 cannot be used on Windows XP or earlier.


    1. VEG
      14.12.2021 19:36
      +1

      Вот тут лежит небольшой патч и бинарники Python 3.9 и 3.10 с поддержкой Windows 7.


      1. kovserg
        14.12.2021 21:27
        -2

        Здорово, а к blender-у, который использует питон есть патч, что бы на windows 7 пускался?


      1. kovserg
        16.12.2021 15:33

        Если детально посмотреть отличия. То не было причин ломать совместимость с windows 7
        ради 3х функций PathCchCanonicalizeEx, PathCchCombineEx, PathCchSkipRoot.
        Но теперь очень можно что бы софт особенно (языки и библиотеки которые используют другие) требовали только последнюю версию ОС даже если на то нет причин.
        В результате сжигают мосты для старого железа. А потом зеленые ноют что всё пропало.
        Более того в апи специально появляются новые модные функции типа CreateFile2 без которых просто жить нельзя, зато можно сказать что пора обновить комп, т.к. новая ось требует новое железа, а новый софт работает только на глючной свежей ос, с последними костылями исправлениями безопасности 3х дневной давности.


        1. VEG
          16.12.2021 16:11

          Разработчики Python дропнули поддержку Windows 7 не потому что нужны были какие-то новые функции в ОС, а просто потому что официальная поддержка ОС была окончена. То что 2023 года всё ещё выходят платные обновления (ESU) их не волновало.


          1. kovserg
            16.12.2021 17:08
            -2

            Скорее всего дропнули поддержку Windows 7 потому что им за это заплатили. Зато теперь все кто использовал python как скриптовый движок после обновления перестают пускаться на win7. Здорово же, не так ли?
            image


            1. VEG
              16.12.2021 17:12
              +1

              Какая-то нелепая теория заговора. Точно нет. Они просто следуют PEP-11, где чётко сказано:

              Microsoft has established a policy called product support lifecycle [1]. Each product's lifecycle has a mainstream support phase, where the product is generally commercially available, and an extended support phase, where paid support is still available, and certain bug fixes are released (in particular security fixes).
              CPython's Windows support now follows this lifecycle. A new feature release X.Y.0 will support all Windows releases whose extended support phase is not yet expired. Subsequent bug fix releases will support the same Windows releases as the original feature release (even if the extended support phase has ended).
              Я сам до сих пор пользуюсь Windows 7, и вообще мягко говоря не фанат Python, но иногда приходится с ним иметь дело, поэтому как бы немного в курсе.


              1. kovserg
                16.12.2021 17:28

                Вы лучше представьте что холодильник или стиральная машина после 2х лет перестаёт работать, потому как производитель больше не выпускает заплатки безопасности не поддерживает это оборудование, зато выпускает более новое.
                Вообще какое дело питону до микрософт policy? Что им мешает идти своим путём с максимальным покрытием абонентов? (Кроме как взносы спонсоров и не навязчивые рекомендации вип визионеров?) А прекращать поддержу win7 из-за како-го то leftpad-а не очень убедительная причина.


                1. VEG
                  16.12.2021 18:07

                  PEP-11 — это никаким образом не полиси Microsoft. Разработчики Python сами лет 10 назад предельно чётко обозначили как долго они поддерживают разные версии Windows, просто чтобы поменьше дурить себе голову о поддержке старых ОС.

                  Что касается самой Microsoft, VS2019 официально полностью поддерживает Windows 7, даже в тех местах где формально нужны новые API из Windows 10, они прикрутили костылики, чтобы оно работало и на Windows 7. VS2022 официально уже не поддерживает Windows 7, с костыликами для поддержки уже не заморачиваются, но её можно установить, и большинство функций даже работает (но некоторые новые функции глючат и на старой ОС и их лучше выключить). При этом в самой VS2022 до сих пор доступны все инструменты для разработки даже для Windows XP, для тех кто до сих пор хочет поддерживать эту ОС.

                  То есть сама среда разработки официально поддерживается только на новых ОС, потому что разработчики среды перестали тратить время на поддержку Windows 7, 8 и старых необновлённых 10, но при этом никто не запрещает в ней разрабатывать софт, который будет работать хоть на Windows XP.

                  Не очень сходится с вашими догадками.


                  1. kovserg
                    16.12.2021 18:12

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


                    1. VEG
                      16.12.2021 18:13

                      Так а Microsoft при чём к тому, что разработчики разных библиотек не хотят поддерживать устаревшую ОС? Microsoft очень долго поддерживает инструменты разработки под старые версии ОС. То что среди разработчиков Python в целом Windows не особо то популярна, а уж Windows 7 тем более, и они дропнули её поддержку «по расписанию» для собственного удобства, опираясь на полиси, которые они сами написали более 10 лет назад — в чём вина Microsoft?


                      1. kovserg
                        16.12.2021 20:55

                        они дропнули её поддержку «по расписанию» для собственного удобства

                        Я про это и говорю, что везких причин кроме расписания к дропанью нет.
                        Разработчики других библиотек обычно не виноваты, они просто используют стандартные инструменты куда специально закладываются подобные грабли несовместимости. Например в libstdc++ добавили функцию basic_string::compare и внезапно часть дистрибутивов линукса мгновенно устарела. Вроде хотели же как лучше. Но тенденция во всей индустрии к одноразовому софту прямо видна не вооруженным глазом.


                      1. VEG
                        16.12.2021 21:44

                        Ну «эта ОС устарела» — достаточно веское основание для отказа от поддержки. Вопрос, в какой момент считать ОС устаревшей. Разработчики Python выбрали свой критерий. Сейчас несовместимостей мало, так как от поддержки отказались недавно, но со временем количество несовместимостей будет увеличиваться, так как разработчикам развязали руки. Обсуждение отказа от поддержки Windows 7 было тут.

                        Лично мне кажется, что они поспешили (и надо было протянуть хотя бы до 2023), но хоть сколько нибудь заметной волны недовольства от отказа поддержки Windows 7 не было, значит наверное Python мало кому уже нужен на Windows 7. Судя по 15 звёздам в репозитории версии с поддержкой Windows 7, людей кому нужен новый Python на Windows 7 ничтожно мало.

                        От того что софт в какой-то момент заканчивает поддержку старых ОС, он не становится одноразовым. Если вам нужен какой-то новый софт, который уже не работает на старой Windows 7, и у вас нет возможности или желания самостоятельно собрать его с поддержкой Windows 7, вы всегда можете поставить Windows 10 или 11. Я как-то ставил Windows 10 на компьютер аж 2009 года. Работает. Windows 10 будет поддерживаться ещё минимум 5 лет.


                      1. kovserg
                        16.12.2021 22:46
                        -1

                        вы всегда можете поставить Windows 10 или 11
                        иногда такое не возможно. Да и смена «обоев» иногда приводит только к лишнему геморою и страданиям от «новшеств», если раньше всё просто работало, теперь за этим всем надо следить не поломают ли новые обновления принтеры и еще чего просто скажут что на этом железе больше работать невозможно, покупайте новое.
                        Ну «эта ОС устарела» — достаточно веское основание для отказа от поддержки.
                        — тут не отказ, а специальная установка палок в колёса.
                        Дело в том что огромное количество софта использует питон как скриптовый язык и даже если они не планировали их софт автоматом теперь вынуждает обновляться, старый софт это не модно, а еще и очень опасно (как раньше с ним работали и не вымерли досих пор, от поражения страшными дырами в безопасности не понятно).
                        И то что звёзд в репозитории мало, это потому как проблемы появляются не сразу а постепенно, более того сам посебе патч не исправит проблему с софтом который будет использовать питон без патча.
                        От того что софт в какой-то момент заканчивает поддержку старых ОС, он не становится одноразовым
                        Можно назвать запланированным устареванием. Но это сути не меняет.


                      1. baldr
                        16.12.2021 23:37

                        Так вас никто не заставляет - используйте старый, не обновляющийся, питон на старой, не обновляющейся, windows.


                      1. kovserg
                        17.12.2021 00:25

                        Как никто?

                        Заканчивается поддержка Python 3.6
                        Или pip продолжит работать?


                      1. baldr
                        17.12.2021 00:38

                        Не вижу причин почему бы и нет. Если вы хотите чтобы он продолжал скачивать пакеты с PyPI (или другого репозитория) - то он будет их скачивать до тех пор пока они там публикуются.

                        Как я вижу вашу проблему - у вас (ок, теоретически у вас) есть старая система на Windows, которую нельзя обновлять по каким-то причинам.

                        Ок, скачайте все необходимые бинарники (старый Python, и тп) и пакеты (whl) локально и ставьте их локально когда переустанавливаете что-то. Я так делал.

                        Не хотите локально - можно поднять репозиторий во внутренней сети и ставить только оттуда.

                        Обновления безопасности не будут приходить на Python? Так они и на операционку не будут приходить, а в ней дыр гораздо больше.


                      1. VEG
                        17.12.2021 00:29
                        +1

                        Дело в том что огромное количество софта использует питон как скриптовый язык и даже если они не планировали их софт автоматом теперь вынуждает обновляться
                        Разработчики этого софта тоже сами принимают решение, нужен ли им самый новый Python без поддержки Windows 7, или они ещё хотят поддерживать Windows 7, из-за чего они могут решить либо остаться на предыдущей версии Python, либо же могут сами собрать самую последнюю версию Python с поддержкой Windows 7, даже патч для этого готовый есть. Но так как они тоже посчитали Windows 7 устаревшей, то тоже отказались от поддержки.

                        В начале следующего года Google грозится перестать выпускать мажорные обновления Chrome для Windows 7, а ещё через год прекратить выпускать даже критические обновления для той версии Chrome, что будет последней для Windows 7. Клоны Chromium неизбежно последуют, так как вряд ли кто захочет тратить деньги на самостоятельную поддержку Windows 7. Как и в случае с Windows XP, Mozilla скорее всего будет поддерживать Windows 7 на 2-3 года дольше.

                        В общем, чем дальше, тем больше ПО будет выходить без поддержки Windows 7. Это неизбежно.

                        Можно назвать запланированным устареванием. Но это сути не меняет.
                        Нет, это не запланированное устаревание. Вы всё ещё можете обновить ОС, чтобы новый софт тоже работал. Вы просто хотите странного: чтобы самый новый софт работал на ОС более 10-летней давности. Старой ОС старый софт. Жизненный цикл Windows 7 подходит к концу, и в ближайшие несколько лет она перейдёт в категорию «ретро», как и Windows XP. Грубо говоря, когда все основные браузера (по сути, Chrome и Firefox) перестанут поддерживать Windows 7, тогда и всё. Так как сидеть в интернете в не последней версии браузера долго не получится (уже через год сайты начнут ломаться), плюс это небезопасно.


                      1. kovserg
                        17.12.2021 00:30

                        Вы просто хотите странного: чтобы самый новый софт работал на ОС более 10-летней давности.
                        По вашему это не возможно?
                        Старой ОС старый софт
                        к сожалению вы просто не сможете найти такой софт. Например дрова для старых карт AMD последняя версия которая есть на сайте, не рабочая (поломано апаратное ускорение видео), а рабочую надо еще поискать.


                      1. VEG
                        17.12.2021 00:45
                        +1

                        к сожалению вы просто не сможете найти такой софт.
                        При желании можно очень много чего найти. Я вот несколлько лет назад искал старые программные синтезаторы Yamaha для Windows 3 и 9x, нашёл много всякого, теперь не знаю как найти время чтобы это всё разгрести и систематизировать. Хотя это вообще софт родом из 90-х. А вы говорите про софт для Windows 7, которая ещё только собирается перейти в категорию «ретро».

                        По вашему это не возможно?
                        Возможно поддерживать да хоть Windows 95. Но это теряет смысл по мере устаревания ОС, а время и деньги на поддержку — требует.

                        Вас же не возмущает, что свежий Python не поддерживает DOS. А ведь когда-то поддерживал. То же самое и с Windows 7. Рано или поздно, весь популярный софт перестанет её поддерживать.


                      1. baldr
                        17.12.2021 00:51

                        Если целесообразно - то возможно, конечно. Но каждая строчка кода, теоретически, должна кем-то поддерживаться и тестироваться. Нужно ли тестировать на старой ОС? А, ведь, для нее и собирать бинарники надо тоже отдельно.

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

                        Что касается совместимости: в новом Python вводятся, например, новые языковые констукции - async/await, моржовый оператор, switch, ... Раз использовав новую фичу - вы автоматически заставляете всех пользователей вашего приложения или библиотеки использовать версию интерпретатора выше определенной вами. Если где-то еще используется Python 2.4 (например) - это разве повод поддерживать его в новых библиотеках?


                      1. kovserg
                        17.12.2021 01:22
                        -1

                        Но каждая строчка кода, теоретически, должна кем-то поддерживаться и тестироваться

                        Внезапно эти строчки уже работали. И тесты проводит машина.

                        Что касается совместимости: в новом Python вводятся, например, новые языковые констукции — async/await, моржовый оператор, switch

                        Внезапно питон работает не только под windows и желание использовать именно в версии windows эти «незаменимые» блестящие функции очень настораживает. Каким боком внутри языковые конструкции привязаны к функция работы с именами файлов. Которые отсутствуют в других ос. При этом не вызывая каких то ни было трудностей.

                        Я вот несколлько лет назад искал старые программные синтезаторы Yamaha для Windows 3 и 9x, нашёл много всякого

                        Сравнили, раньше по было не большое и автономное. Кто будет хранит сетевые репозитории всех версий питона и библиотек. Оно кому-то надо?


        1. baldr
          17.12.2021 07:27

          Насколько я понимаю, одна из фич новых версий Windows - поддержка путей длиннее 260 символов. И эти изменения в python, возможно, связаны с тем, чтобы не поддерживать старый код с этим ограничением.


          1. kovserg
            17.12.2021 10:58

            Windows и раньше UNC \\?\ пути поддерживал до 32кб.


  1. baldr
    14.12.2021 22:07
    +1

    А КДПВ вообще для Python2, который, по идее, уже точно 2 года как не поддерживается...