Учебный журнал Статья

Вышел Python 3.15. Что в нем нового

9 октября 2026 года вышел Python 3.15 — новая основная версия языка. В ней есть изменения, которые могут повлиять на повседневную разработку: кодировка UTF‑8 стала значением по умолчанию, появились новые возможности для работы с импортами, отображениями и типами, а экспериментальный JIT-компилятор получил дальнейшее развитие.

Обновление не обязательно означает, что существующее приложение сразу заработает быстрее или потребует переписывания. Но оно затрагивает поведение файлового ввода-вывода, устаревшие программные интерфейсы и сторонние расширения. Поэтому главное практическое правило — сначала проверить совместимость проекта, а уже затем менять рабочую среду.

1. UTF‑8 по умолчанию: меньше сюрпризов с текстовыми файлами

Одно из наиболее заметных изменений Python 3.15 — UTF‑8 стала кодировкой по умолчанию. Для проектов, которые явно задают кодировку при чтении и записи текстовых файлов, это изменение обычно не требует правок. Но код, полагающийся на системную кодировку, может вести себя иначе после обновления.

Например, в вызове ниже кодировка не указана:

with open("данные.txt") as файл:
    текст = файл.read()

Если программа должна одинаково работать на разных компьютерах, лучше указать кодировку явно:

with open("данные.txt", encoding="utf-8") as файл:
    текст = файл.read()

Так же стоит поступать и при записи. Это полезно не только при переходе на 3.15: явная настройка делает поведение программы предсказуемее независимо от операционной системы и окружения.

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

2. Импорты и структуры данных: новые возможности языка

В Python 3.15 появились ленивые импорты. В общих чертах это позволяет отложить загрузку модуля до момента, когда он действительно понадобится. Такая возможность может быть полезна приложениям с большим числом зависимостей, особенно если часть модулей используется лишь в редких сценариях. При этом ленивый импорт не следует воспринимать как автоматическое ускорение любого проекта: результат зависит от того, как именно приложение загружает и использует свои модули.

Ещё одно нововведение — тип frozendict, то есть неизменяемое отображение. Обычный словарь можно менять после создания, а неизменяемая структура подходит для данных, которые должны оставаться фиксированными. Это может сделать намерения программы яснее и помочь избежать случайных изменений там, где набор соответствий считается постоянным. Конкретные детали использования и ограничения стоит сверить с документацией к новой версии.

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

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

3. Экспериментальный JIT: развитие без обещания мгновенного ускорения

В Python 3.15 продолжена работа над экспериментальным JIT-компилятором — технологией, которая может ускорять выполнение некоторых программ за счёт компиляции участков кода во время работы. В этой версии JIT улучшен, но его экспериментальный статус важен: не следует считать, что любое приложение автоматически станет быстрее после обновления.

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

Практический подход прост: сначала зафиксировать показатели текущей версии, затем запустить те же тесты на Python 3.15 в сопоставимых условиях. Сравнивать стоит не только время выполнения, но и корректность результатов, использование памяти и стабильность. Пока технология остаётся экспериментальной, решения о её применении особенно важно основывать на собственных измерениях, а не на общих ожиданиях.

4. Совместимость: что проверить перед переходом

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

Отдельного внимания требуют расширения на языке Си и бинарные пакеты. Их совместимость с новой версией нельзя предполагать заранее: некоторые компоненты могут потребовать обновления или повторной сборки. Перед переносом рабочей системы проверьте, что критичные зависимости поддерживают Python 3.15, а нужные расширения устанавливаются и проходят тесты.

Удобно пройти обновление поэтапно:

  1. Создать отдельное окружение с Python 3.15.
  2. Установить зависимости проекта и проверить их совместимость.
  3. Запустить полный набор тестов, уделив внимание файловому вводу-выводу.
  4. Проверить ключевые пользовательские сценарии и сторонние расширения.
  5. Сравнить производительность с текущей версией, если скорость важна для проекта.

Такой порядок позволяет отделить проблемы самого приложения от несовместимости конкретной библиотеки или инструмента.

Итог

Python 3.15 сочетает изменения, заметные в повседневном коде, и более специализированные нововведения. Переход на UTF‑8 по умолчанию делает явное указание кодировки особенно важным для переносимых приложений; ленивые импорты, неизменяемые отображения и обновлённая типизация расширяют инструментарий разработчика; развитие JIT открывает возможности для дальнейших экспериментов с производительностью.

Обновляться разумно после проверки зависимостей, файлового ввода-вывода и расширений на языке Си. А чтобы понять, даст ли новая версия практическую выгоду конкретному проекту, лучше опираться на тесты и измерения, а не только на список новшеств.

Обсуждение на форуме