Неожиданный октябрьский RC3-релиз и другие новости Python

7 мин
Неожиданный октябрьский RC3-релиз и другие новости Python

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

Одновременно сообщество начинает получать первые ответы на вопросы, возникшие еще в марте после новости о покупке компании Astral компанией OpenAI — тогда разработчики всерьез обеспокоились судьбой инструментов Python, оказавшихся в руках сторонней корпорации. Сентябрь представил, что экосистема довольно успешно адаптируется: был избран первый в истории Python Packaging Council, а сам PyPI ужесточил методологию подсчета загрузок.

Python 3.15 получил неожиданную версию RC3

Релиз Python 3.15 должен был стать наиболее предсказуемой новостью месяца, будучи еще год назад запланированным на 1 октября 2026 года. Набор функций был окончательно утвержден еще в мае, тем не менее некоторое количество обнаруженных в последнюю минуту ошибок, связанных с lazy-import, вынудили внезапно анонсировать третьего кандидата на версия (RC3), а дата финального релиза была перенесена на конец этой недели.

Критические ошибки представляли собой типичные частные случаи, которые обнаруживаются только тогда, когда люди начинают реально использовать ту или иную функцию. Один дефект был обнаружен в lazy import a.b as c, где переменная b рассматривалась как атрибут a вместо того, чтобы импортировать подмодуль a.b. Еще одна сбой заключалась в том, что при изменении одного лениво импортированного подмодуля пакета также импортировался родственный подмодуль. Решение отложить релиз на неделю становится довольно понятным — лучше исправить все сразу, чем выпускать версию, заранее зная об имеющихся багах.

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

Пример совместной работы lazy import, frozen dictionary и sentinel:

>>> lazy import json
>>> import sys
>>> "json" in sys.modules
False
>>> defaults = frozendict({"theme": "light", "autosave": True})
>>> MISSING = sentinel("MISSING")
>>> defaults.get("font", MISSING)
MISSING
>>> json.dumps(defaults | {"theme": "dark"})
'{"theme": "dark", "autosave": true}'
>>> "json" in sys.modules
True

Мягкое ключевое слово lazy откладывает импорт до момента первого обращения к json, следовательно компонент появляется в sys.modules только после вызова .dumps(). Встроенные модули frozendict и sentinel — это два новых типа: один для ассоциативных массивов, которые нельзя изменить, а иной — для обозначения отсутствующих значений, когда None является допустимым.

Также в выпуск добавлены следующие нововведения:

  • Теперь кодировка UTF-8 по умолчанию применяется везде, поэтому опция open() больше не пытается определить кодировку на основе системных локальных настроек.

  • Cемплирующий профилировщик из стандартной библиотеки может подключаться к запущенному процессу.

  • В обновленном компиляторе just-in-time (JIT) добавлен клиентская часть с трассировкой. Он пока находится в экспериментальной стадии и работает только в некоторых сборках. По результатам тестов главный команды разработчиков он работает на 7–8 процентов быстрее, чем стандартный интерпретатор, на x86-64 под Linux, и на 11–12 процентов быстрее, чем интерпретатор tail-calling на AArch64 под macOS.

  • В официальных 64-битных исполняемых файлах Windows интерпретатор tail-calling создан с помощью Visual Studio 2026. В тестах pyperformance, проведенных на архитектуре x86-64, он продемонстрировал прирост производительности на 15–20 процентов по сравнению с интерпретатором switch-case.

  • abi3t — это стабильный ABI для сборки с поддержкой свободных потоков. Расширение на языке C, в котором включена эта поддержка, может поставляться в виде одного wheel-пакета для Python 3.15 и более поздних версий с поддержкой свободных потоков, хотя распространенные инструменты сборки пока не могут создавать такие файлы.

Еще одно модификация — больше откат, чем новая опция. Инкрементальный сборщик мусора, в первый раз представленный в версии 3.14.0, был отменен в версии 3.14.5 после поступления сообщений о перегрузке памяти, и в версии 3.15 сохранен старый поколенческий сборщик. Это уже второй раз, когда данная создание отменяется — полезное напоминание о том, что хороший результат тестирования не всегда означает успех в производственной среде.

VDS-серверы от 200 ₽/месяц

Семь готовых конфигураций, KVM-виртуализация, NVMe SSD и техническая поддержка 24/7.

Запустить в пару кликов →

Избран начальный в истории Python Packaging Council

Голосование завершилось 15 сентября, а уже 17 сентября Python Software Foundation (PSF) объявила состав первого в истории Python Packaging Council. Бретт Кэннон и Прадюн Гедам одержали победу и вошли в совет на двухлетний срок. Дональд Стаффт, Генри Шрейнер и Ральф Гоммерс получили полномочия на один год. 541 избиратель принял участие в голосовании. В тот же день завершились выборы в совет директоров PSF, куда вошли Элейн Вонг, Лаис Карвальо, И Дурбин и Георги Кер при 670 проголосовавших.

Новоизбранный совет сразу столкнулся с двумя задачами — черновиками предложений по улучшению Python (PEP), касающимися виртуальных окружений:

  • PEP 832 стандартизирует способ, с помощью которого инструменты обнаруживают виртуальное окружение проекта.

  • PEP 838 вводит стандартное поле ввода python-version в файле pyvenv.cfg. Разнообразные инструменты уже записывают туда версию, однако используют при этом разные ключи и форматы. Новое поле будет хранить только основной и дополнительный номера версий, что предотвратит его устаревание при установке патч-обновлений.

Оба черновика находятся на стыке основного интерпретатора и инструментов упаковки, из-за чего возник вопрос: кто именно должен принимать по ним решение? Еще в августе Бретт Кэннон задал этот вопрос Руководящему совету, на что 10 сентября получил ответ: принятие этих PEP входит в совместную сферу ответственности с Packaging Council согласно PEP 772, а совместное подход будет принято сразу после формирования нового совета.

Тем временем сам PEP 832 успел измениться: 8 сентября Кэннон вернул его к раннему дизайну с использованием файла .venv. Во всей этой ситуации есть доля иронии: Бретт Кэннон, будучи автором PEP, теперь входит в один из двух советов, принимающих по нему подход. Подобное пересечение ролей — обычное дело для небольшого сообщества, однако за тем, как будет решаться конфликт интересов, будет интересно понаблюдать.

Еще одна институциональная инициатива развивается в репозитории python/prebuilt-cpython, где с октября 2025 года ведется планирование официальных предварительных перемещаемых сборок CPython. Сейчас сборки, которые uv скачивает при запросе конкретной версии Python, поставляются из проекта Astral python-build-standalone. Выход официальной альтернативы под эгидой организации python снизит зависимость экосистемы от коммерческих компаний, что звучит особенно обнадеживающе на фоне последних новостей о слияниях и поглощениях.

Компания Astral, в свою очередь, продолжает активную разработку: 31 августа в uv был влит пул-реквест, реализующий дедупликацию идентичных файлов в кэше файлов .wheel с помощью жестких ссылок (hard links). Это позволило автору изменений сократить размер кэша около на 10%. Возможно, функция выглядит не слишком впечатляюще, но ваш жесткий диск однозначно скажет вам спасибо.

PyPI ужесточает подход к собственной статистике

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

С 24 августа PyPI ужесточил правила подсчета загрузок: теперь загрузкой считается только скачивание непосредственно файлов пакетов (.whl, .tar.gz или .zip). Запросы на получение одних лишь метаданных, которые генерируют современные installer-инструменты и на которые раньше приходилось около 40% трафика, больше не учитываются. Если вы поддерживаете собственный пакет и заметили резкое снижение графика скачиваний в конце августа — причина именно в этом. Старые показатели за прошлые периоды задним числом не пересчитывались, поэтому при сравнении метрик стоит учитывать эти изменения. Сам PyPI при этом напоминает, что количество скачиваний не является прямым эквивалентом числа реальных пользователей или популярности проекта.

Также PyPI опубликовал разбор инцидента, объясняющий периодические ошибки 502 и 503 при скачивании файлов с files.pythonhosted.org в период с 15 по 28 августа. Причиной нестабильной работы стал неудачный канареечный выпуск на стороне CDN-провайдера Fastly в сочетании с несколькими ошибками конфигурации на стороне самого PyPI. Если ваши CI/CD-пайплайны внезапно падали во второй половине августа, то теперь вы знаете причину.

Бретт Кэннон в отдельном материале разобрал, чего не хватает PyPI для реализации полноценных воспроизводимых сборок. В готовых wheel-файлах уже можно фиксировать инструменты сборки в формате SBOM согласно PEP 770. Однако в экосистеме до сих пор нет стандартного способа указания точного источника кода для sdist, механизма передачи SBOM в исходных дистрибутивах и инфраструктуры PyPI для публикации независимых подтверждений воспроизводимости. Кэннон предложил решения для всех трех проблем, включая новый формат исходных пакетов и использование доверенных верификаторов через программный оболочку индекса.

Все три истории наглядно демонстрируют вектор развития управления пакетами: новоизбранный Packaging Council принимает руководство индексом, который становится более прозрачным и точным в своих метриках, что поможет совету в принятии решений.

Читают сейчас

Raspberry Pi в начальный раз за четыре года обновила Raspberry Pi Desktop

26 минут назад

Raspberry Pi в начальный раз за четыре года обновила Raspberry Pi Desktop

Raspberry Pi выпустила апдейт Raspberry Pi Desktop — бесплатной системы на базе Debian с фирменным рабочим столом для обычных компьютеров. Есть версии для ПК и Mac на чипах Intel. Ознакомиться далее

Основной враг ремейков Resident Evil — идеализированные воспоминания геймеров

33 минуты назад

Основной враг ремейков Resident Evil — идеализированные воспоминания геймеров

Разработка ремейков классических игр требует глубокого понимания психологии аудитории. Продюсер серии Resident Evil Есиаки Хирабаяси рассказал, с какой главной сложностью сталкивается команда Capcom п

ИИ Claude построил опасный маршрут на гору для подростка

1 час назад

ИИ Claude построил опасный маршрут на гору для подростка

16-летний подросток чуть не погиб у скального участка под названием «Widowmaker Arete» (“Гребень „Вдоводел“”) на горе Краун (Crown Mountain) в Британской Колумбии. Он попал туда, следуя маршруту, кото

GitHub сделал stacked pull requests общедоступными

1 час назад

GitHub сделал stacked pull requests общедоступными

GitHub вывел stacked pull requests в общий доступ. Механика даёт возможность разбивать крупные изменения на цепочку связанных PR, а вместе с релизом сервис улучшил ребейз, слияние стеков и навигацию м

«Сферум» запустил служба с информацией об олимпиадах для школьников

1 час назад

«Сферум» запустил служба с информацией об олимпиадах для школьников

Образовательная платформа «Сферум» запустила сервис «Олимпиады», где собрана информация о соревнованиях для школьников по различным предметам и направлениям, рассказали у в пресс‑службе компании. Чита