Прямо сейчас на странице «Все выпуски» веб-сайта Python Software Foundation ссылка «Загрузить последний выпуск» указывает на версию Python 3.6.4. Однако вы можете найти на странице, что выпуск от 2017-12-19, и с тех пор было два других выпуска для Python 3.5.5 и Python 3.4.8.
Я понимаю, почему существуют две параллельные версии Python с 3 и 2.7, но я не понимаю, почему они являются несколькими версиями Python 3, поскольку они должны быть обратно совместимы с кодом Python 3.






Python 3.x не обязательно обратно совместим. Например, в Python 3.6 была введена строковая интерполяция, также известная как f-строка. В python 3.5 были введены подсказки типа, которые не были обратно совместимы со старыми версиями 3.x.
Под подсказками типа вы имеете в виду PEP-3107?
x.y.Z точечные релизы обычно релизы с исправлением ошибок.
Выпуски x.Y обычно являются выпусками функций, но могут содержать обратную несовместимость незначительный.
Релизы X - это большие изменения, которые могут нарушить большую часть существующего кода.
На практике вы не всегда можете сразу обновить версию x.Y; Причины варьируются от фактической несовместимости кода, которую нельзя быстро исправить, до внутренних ограничений развертывания и причин планирования. Дистрибутивы Linux также часто распространяют одну конкретную версию x.Y, а следующая версия появится только через год в годовом цикле выпуска или около того. Однако версии x.y.Z часто появляются в ближайшее время и обычно могут быть установлены без нарушения существующего кода.
Причина, по которой несколько версий x.y.Z поддерживаются параллельно, заключается в том, что пользователи хотят воспользоваться преимуществами исправления ошибок без необходимости обновления до новой основной версии.
Страница Python Цикл разработки описывает, как python поддерживает версии. Вот несколько фрагментов:
17.1.1. In-development (main) branch
The master branch is the branch for the next feature release; it is under active development for all kinds of changes: new features, semantic changes, performance improvements, bug fixes.
17.1.2. Maintenance branches
A branch for a previous feature release, currently being maintained for bug fixes. There are usually two maintenance branches at any given time: one for Python 3.x and one for Python 2.x.
17.1.3. Security branches
A branch less than 5 years old but no longer in maintenance mode is a security branch. The only changes made to a security branch are those fixing issues exploitable by attackers such as crashes, privilege escalation and, optionally, other issues such as denial of service attacks.
Таким образом, помимо основной ветки, получающей обновления новых функций, существует обслуживающая ветка, получающая общие исправления ошибок для каждого из Python 2 и 3, а также ряд других веток, получающих исправления безопасности. Когда применяются исправления ошибок / безопасности, версия микро / патча (третье число в версии) увеличивается. Вот снимок того, как это выглядело на момент написания, из того же документа:
17.1.4. Summary
There are 6 open branches right now in the Git repository:
- the master branch accepts features and bugs fixes for the future 3.8.0 feature release (RM: Łukasz Langa)
- the 3.7 branch accepts bug, regression, and doc fixes for the upcoming 3.7.0 feature release (RM: Ned Deily)
- the 3.6 branch accepts bug fixes for future 3.6.x maintenance releases (RM: Ned Deily)
- the 3.5 branch accepts security fixes for future 3.5.x security releases (RM: Larry Hastings)
- the 3.4 branch accepts security fixes for future 3.4.x security releases (RM: Larry Hastings)
- the 2.7 branch accepts bug fixes for future 2.7.x maintenance releases (RM: Benjamin Peterson)
Python 3.5 - это обратно совместимый с кодом, написанным для 3.4, независимо от того, поддерживает ли он аннотации или нет. Очевидно, что обратное неверно, код, написанный для 3.5, может не работать на Python 3.4. Это немного обратное объяснение, которое также не касается вопроса о параллельных выпусках.