Неожиданный октябрьский 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.modulesFalse>>> 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.modulesTrue

Мягкое ключевое слово 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 для публикации независимых подтверждений воспроизводимости. Кэннон предложил решения для всех трех проблем, включая новый формат исходных пакетов и использование доверенных верификаторов через API индекса.

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

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев