pip 26.2 стал учитывать
🔘
🔘 экспериментальный режим
🔘 добавлены поддержка Python 3.15, self-referential extras, флаг
🔘 закрыты утечка системных пакетов в изолированную сборку на 3.15, несовпадение метаданных PEP 658, symlink traversal в tar-архивах и CVE-2026-13346;
🔘 26.2.1 вернул использование keyring из неактивированного virtualenv.
@zen_of_python
Cache-Control индекса, и это первое, что заметят пользователи: только что опубликованный пакет может не появиться сразу, если между вами и PyPI кэширующий прокси. Для принудительного обновления есть --refresh-package. Релиз вышел 29 июля, 26.2.1 — 4 августа.PIP_CONSTRAINT больше не влияет на изолированные сборочные окружения; для них появились --build-constraint и PIP_BUILD_CONSTRAINT;venv-isolation запускает сборку в обычных virtualenv вместо временных окружений;--only-deps и поле upload-time в pylock.toml;@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
CPython официально поддерживает RISC-V. Стан Ульбрих объявил об этом 24 августа в Python Insider: архитектура добавлена в PEP 11 как платформа третьего уровня.
RISC-V — открытая архитектура набора команд: в отличие от x86 и ARM, её может реализовать кто угодно. В записи ссылаются на прогноз, по которому экосистема вырастет вчетверо к 2032 году.
Держится всё на живом железе: несколько машин RISC-V передал проект RISE, на них крутятся боты сборки. Автор благодарит Людовика Анри из RISE, Фуркана Ондера и Эмму Смит, а свою работу вёл при поддержке Sovereign Tech Agency.
Что дальше. Боты сборки запускаются уже после слияния патча, поэтому команда разбирается, как завести RISC-V прямо в CI CPython — через инициативу RISE RISC-V Runners. В долгую цель — второй уровень поддержки и оптимизации под саму архитектуру.
Отдельно просят тех, у кого есть железо: собрать CPython, прогнать свои задачи и тесты и рассказать, что сломалось.
@zen_of_python
RISC-V — открытая архитектура набора команд: в отличие от x86 и ARM, её может реализовать кто угодно. В записи ссылаются на прогноз, по которому экосистема вырастет вчетверо к 2032 году.
Держится всё на живом железе: несколько машин RISC-V передал проект RISE, на них крутятся боты сборки. Автор благодарит Людовика Анри из RISE, Фуркана Ондера и Эмму Смит, а свою работу вёл при поддержке Sovereign Tech Agency.
Что дальше. Боты сборки запускаются уже после слияния патча, поэтому команда разбирается, как завести RISC-V прямо в CI CPython — через инициативу RISE RISC-V Runners. В долгую цель — второй уровень поддержки и оптимизации под саму архитектуру.
Отдельно просят тех, у кого есть железо: собрать CPython, прогнать свои задачи и тесты и рассказать, что сломалось.
@zen_of_python
👍3
Михаил Суриков собрал конвейер, который берёт сгенерированный моделью код на Python, ищет в нём уязвимости, чинит и проверяет заново. Сканируют параллельно CodeQL и Bandit, отдельная модель-валидатор смотрит своим взглядом, находки обогащаются техниками MITRE ATT&CK и примерами CWE, после чего другая модель пишет исправление.
Проверяли на 26 промптах из LLMSecEval, девяти категориях CWE и четырёх моделях Claude — всего 80 прогонов. Если валидатору дополнительно показать находки CodeQL и Bandit, число срабатываний статических анализаторов падает на 29–69% против 9–54% без этого.
Интересного тут два. Во-первых, само исправление в 15–22% случаев заносит новую уязвимость, и примерно в 70% таких случаев это ровно одна новая находка. Во-вторых, лучшая модель-генератор не дала лучший результат в конвейере: меньше всего остаточных находок и выше процент успешных починок оказались у Sonnet 4.6, а не у Opus 4.8.
@zen_of_python
Проверяли на 26 промптах из LLMSecEval, девяти категориях CWE и четырёх моделях Claude — всего 80 прогонов. Если валидатору дополнительно показать находки CodeQL и Bandit, число срабатываний статических анализаторов падает на 29–69% против 9–54% без этого.
Интересного тут два. Во-первых, само исправление в 15–22% случаев заносит новую уязвимость, и примерно в 70% таких случаев это ровно одна новая находка. Во-вторых, лучшая модель-генератор не дала лучший результат в конвейере: меньше всего остаточных находок и выше процент успешных починок оказались у Sonnet 4.6, а не у Opus 4.8.
@zen_of_python
Встречайте новую мини-игру — «Отпуск».
За несколько шагов нужно подготовить героя к поездке: навести порядок, разобрать вещи, отыскать билет и упаковать чемодан. Отдельный этап — отпускной гардероб, и тут всё непросто.
Простое управление, короткие уровни, юмор. Отличный способ отвлечься на пару минут между задачами и заодно поймать промокоды от партнёров!
Попробовать: https://tprg.ru/H2cI
За несколько шагов нужно подготовить героя к поездке: навести порядок, разобрать вещи, отыскать билет и упаковать чемодан. Отдельный этап — отпускной гардероб, и тут всё непросто.
Простое управление, короткие уровни, юмор. Отличный способ отвлечься на пару минут между задачами и заодно поймать промокоды от партнёров!
Попробовать: https://tprg.ru/H2cI
Фильтры распаковки
Имя элемента в архиве вида
Правка в
Запись легла в
@zen_of_python
tar и data в tarfile создавали каталоги за пределами каталога назначения. Стан из Ирландии завёл issue 18 августа, исправление влили в main 19 августа.Имя элемента в архиве вида
../escaped.evil/../dest/sub/file выходит из назначения и возвращается обратно. Проверка контейнмента смотрит на итоговый путь после realpath, а он оказывается внутри dest — значит, элемент считается безопасным. Но промежуточные каталоги создаются по имени как оно записано, и ../escaped.evil появляется снаружи.Правка в
Lib/tarfile.py занимает семь строк: если среди компонентов имени есть .., имя прогоняется через os.path.normpath до вычисления целевого пути. В документации к этому сразу добавлена оговорка — нормализация убирает внутренние .., а это меняет смысл имени, если оно проходит через символические ссылки.Запись легла в
Misc/NEWS.d/next/Security. Бэкпорты в 3.14, 3.13 и 3.12 влиты, в 3.15, 3.11 и 3.10 пока открыты.@zen_of_python
Официальная документация Python теперь доступна на русском — объявили в блоге Python Insider 22 августа.
Открывается по адресу
В записи отдельно напоминают, что переводы держатся на участниках сообщества и отстают от оригинала ровно настолько, насколько их перестают обновлять. Ссылки на руководство для переводчиков и панель со статусом языков — там же.
@zen_of_python
Открывается по адресу
docs.python.org/ru/3/ или переключателем языка в шапке любой страницы: туториал, справочник по языку, описание стандартной библиотеки.В записи отдельно напоминают, что переводы держатся на участниках сообщества и отстают от оригинала ровно настолько, насколько их перестают обновлять. Ссылки на руководство для переводчиков и панель со статусом языков — там же.
@zen_of_python
❤8🔥7❤🔥4👍2
Понятное сообщение об ошибке и быстро исправленная ошибка — это не одно и то же. В работе из Делфтского технического университета 103 человека чинили баги в Python: 38 новичков и 65 опытных.
Сравнивали три варианта одного и того же сообщения: обычный traceback, короткий совет по делу и развёрнутое объяснение с разбором. Среднее время до исправления — 415,69 секунды у обычного, 324,56 у короткого совета и 423,85 у развёрнутого.
По доле починенных багов расклад разошёлся по опыту. У опытных развёрнутое объяснение оказалось лучшим вариантом: 90 процентов против 68 у обычного traceback. У новичков оно же оказалось худшим: 42 процента против 46.
Субъективные оценки при этом сдвинулись значимо — переписанные сообщения людям нравятся больше. Объективного выигрыша в отладке авторы не нашли.
@zen_of_python
Сравнивали три варианта одного и того же сообщения: обычный traceback, короткий совет по делу и развёрнутое объяснение с разбором. Среднее время до исправления — 415,69 секунды у обычного, 324,56 у короткого совета и 423,85 у развёрнутого.
По доле починенных багов расклад разошёлся по опыту. У опытных развёрнутое объяснение оказалось лучшим вариантом: 90 процентов против 68 у обычного traceback. У новичков оно же оказалось худшим: 42 процента против 46.
Субъективные оценки при этом сдвинулись значимо — переписанные сообщения людям нравятся больше. Объективного выигрыша в отладке авторы не нашли.
@zen_of_python
❤1
EVE Online переезжает с Python 2.7 на Python 3. Прошлый раз версию интерпретатора в игре меняли в 2010 году.
CCP рассказала 25 августа, из чего эта работа состоит. Кодовая база — 2,4 млн строк Python примерно в 20 тысячах файлов, поверх 23 лет данных живых игроков: персонажи, навыки, имущество, ISK. Часть кода написана по правилам Python 2.3 и 2.5, которые тройка уже не принимает.
Первый этап — сделать код совместимым сразу с обеими версиями, продолжая запускаться на 2.7; помогают
Опаснее другое: нашлось около 20 тысяч строк, синтаксически корректных в обеих версиях, но работающих по-разному. Классика —
Отдельное ограничение — сервер Tranquility должен оставаться доступным 23,75 часа из каждых 24.
@zen_of_python
CCP рассказала 25 августа, из чего эта работа состоит. Кодовая база — 2,4 млн строк Python примерно в 20 тысячах файлов, поверх 23 лет данных живых игроков: персонажи, навыки, имущество, ISK. Часть кода написана по правилам Python 2.3 и 2.5, которые тройка уже не принимает.
Первый этап — сделать код совместимым сразу с обеими версиями, продолжая запускаться на 2.7; помогают
python-future и 2to3. При компиляции обоими интерпретаторами 95,9% файлов собрались сразу. Осталось около 3300 строк с явными несовместимостями: примерно 1500 старых print, 800 литералов вида 123L, 600 старых форм except и 50 операторов <>.Опаснее другое: нашлось около 20 тысяч строк, синтаксически корректных в обеих версиях, но работающих по-разному. Классика —
1 / 2, которое даёт 0 в Python 2 и 0.5 в Python 3.Отдельное ограничение — сервер Tranquility должен оставаться доступным 23,75 часа из каждых 24.
@zen_of_python
❤6🌚1
Polars 1.44.0 вышел 24 августа, и основная работа в нём пришлась на SQL-слой и на Iceberg.
🔘 Общие табличные выражения теперь кэшируются, а cross join, который раньше появлялся при декорреляции подзапросов в предикатах равенства, устраняется. Неквалифицированные предикаты соединения опускаются до inner join.
🔘 В SQL добавили коррелированные подзапросы с
🔘 Нативный
🔘
🔘 При разрешении схемы в
🔘 Параметр
Чисел по скорости в релизе нет, так что заявлять конкретное ускорение не станем.
@zen_of_python
IN и квантифицированные сравнения с подзапросом.scan_iceberg понимает эволюцию схемы, deletion vectors третьей версии и свойства снапшотов, а пути к объектному хранилищу принимает напрямую.join_where поддерживает больше типов соединения, появились скалярные произведения для массивов фиксированного размера и метод struct.drop().__arrow_c_stream__ Polars освобождает GIL. Отдельно починили порчу данных во вложенных LargeList при работе через Arrow.rechunk у функций чтения и сканирования вместе с Expr.rechunk() объявлены устаревшими.Чисел по скорости в релизе нет, так что заявлять конкретное ускорение не станем.
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Актуальный
Если клиент создаётся без своего
🔘
🔘 Собственный
🔘 Проверка TLS-сертификатов переехала с
Третий пункт бьёт по проду: минимальный образ без системных CA-сертификатов, корпоративный прокси, чей корень лежал только в certifi, свой доработанный бандл — во всех этих случаях верификация может начать падать. Поднимается либо установкой CA в системное хранилище, либо явным бандлом через
Инструкция по миграции лежит в репозитории SDK — там же про изменения в исключениях транспорта, event hooks и моках через RESPX.
openai — 3.5.0 — не тянет за собой httpx. В зависимостях SDK стоит httpx2: отдельный пакет, в который команда Pydantic перенесла сопровождение httpx, потому что оригинал последнее время почти не развивался, а сам он, по формулировке Pydantic, «лежит в критическом пути слишком многих продакшен-систем».Если клиент создаётся без своего
http_client, вызовы, разбор ответов, стриминг, ретраи и числовые таймауты работают как раньше. Смотреть стоит в три места.import httpx в вашем коде упадёт, если пакет приезжал только вместе с SDK и никто больше его не ставит. Лечится строчкой httpx в зависимостях или переносом импортов на httpx2.http_client собирается из нового пакета — DefaultHttpx2Client, httpx2.Timeout, httpx2.HTTPTransport.certifi на системное хранилище доверенных корней, и сам certifi SDK тоже больше не ставит.Третий пункт бьёт по проду: минимальный образ без системных CA-сертификатов, корпоративный прокси, чей корень лежал только в certifi, свой доработанный бандл — во всех этих случаях верификация может начать падать. Поднимается либо установкой CA в системное хранилище, либо явным бандлом через
SSL_CERT_FILE или каталогом в SSL_CERT_DIR (обе переменные читаются при trust_env=True, это значение по умолчанию), либо своим ssl.SSLContext в параметре verify.Инструкция по миграции лежит в репозитории SDK — там же про изменения в исключениях транспорта, event hooks и моках через RESPX.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Отключение GIL ускоряет не всё и берёт плату памятью. Хосе Даниэль Монтойя Саласар сравнил сборки Python 3.14.2 с GIL и без него на четырёх классах нагрузок, меряя время, загрузку ядер, память и потраченную энергию.
На распараллеливаемых задачах с независимыми данными свободнопоточная сборка сокращает время до 4 раз, и энергия падает примерно во столько же. На последовательных выигрыша нет вовсе, а энергии тратится на 13–43 процента больше. Там, где потоки часто читают и меняют одни и те же объекты, ускорение меньше или уходит в минус из-за конкуренции за блокировки.
Энергия во всех замерах пропорциональна времени: снятие GIL почти не меняет мощность, даже когда загрузка ядер вырастает в десять раз.
Память растёт почти везде, виртуальная заметнее физической. Причины — блокировка на каждый объект, дополнительные механизмы потокобезопасности в рантайме и новый аллокатор.
@zen_of_python
На распараллеливаемых задачах с независимыми данными свободнопоточная сборка сокращает время до 4 раз, и энергия падает примерно во столько же. На последовательных выигрыша нет вовсе, а энергии тратится на 13–43 процента больше. Там, где потоки часто читают и меняют одни и те же объекты, ускорение меньше или уходит в минус из-за конкуренции за блокировки.
Энергия во всех замерах пропорциональна времени: снятие GIL почти не меняет мощность, даже когда загрузка ядер вырастает в десять раз.
Память растёт почти везде, виртуальная заметнее физической. Причины — блокировка на каждый объект, дополнительные механизмы потокобезопасности в рантайме и новый аллокатор.
@zen_of_python
❤1🤣1
В стандартной библиотеке 3.15 появился профилировщик, который цепляется к работающему процессу по PID
Профиль с прода снять обычно нечем:
В Python 3.15 добавили
🔘 куда целиться:
🔘 что мерить:
🔘 форматы вывода:
🔘 есть живой TUI в духе top через
Авторы — Пабло Галиндо и Ласло Кишш Коллар. Раздел в What's New описывает все режимы; финал 3.15 ожидается в октябре, сейчас доступен rc1.
@zen_of_python
Профиль с прода снять обычно нечем:
profiling.tracing инструментирует каждый вызов функции и заметно тормозит программу, а перезапускать сервис ради замера никто не даст. Из-за этого «тормозит в бою, на стенде не воспроизводится» годами оставалось без ответа.В Python 3.15 добавили
profiling.sampling, он же Tachyon: семплирующий профилировщик, который периодически снимает стеки уже запущенного процесса. Код менять не нужно, перезапускать не нужно, накладные расходы околонулевые. Частота семплирования — до 1 000 000 Гц, на момент добавления это самый быстрый семплирующий профилировщик для Python.attach по PID к живому процессу, run — скрипт с самого старта, run -m — модуль, dump — одноразовый снимок стеков всех потоков, чтобы понять, на чём висит зависший процесс (с --async-aware — по всем задачам asyncio);--mode wall по умолчанию считает календарное время вместе с ожиданием ввода-вывода, --mode cpu — только счёт, --mode gil показывает, какой поток держит GIL, --mode exception берёт пробы только с потоков с активным исключением;--pstats, --collapsed для FlameGraph и speedscope, --flamegraph — самодостаточный HTML на D3.js, --gecko для Firefox Profiler, --heatmap — построчная тепловая карта по файлам;--live и профилирование до уровня байткода через --opcodes.Авторы — Пабло Галиндо и Ласло Кишш Коллар. Раздел в What's New описывает все режимы; финал 3.15 ожидается в октябре, сейчас доступен rc1.
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
Django опросил 3500 разработчиков: ядро скучное, всё вокруг него бурлит
28 августа Django Software Foundation и PyCharm опубликовали ежегодный The State of Django: почти 3500 ответов из более чем 40 стран, от студентов до людей с десятилетиями стажа.
Ядро держится на месте, и авторы называют это комплиментом: зрелое, но не застывшее. PostgreSQL держит 76–79% пятый год подряд, штатный шаблонизатор — около 80%, а 43% опрошенных уже перешли на Django 6.0 через несколько месяцев после выхода.
Меняется обвязка. Совсем без ИИ-инструментов работают 10% опрошенных; из тех, кто ими пользуется, 58% делают это ежедневно и ещё 27% несколько раз в неделю.
🔘 лидера среди инструментов нет: Claude Code — 35%, ChatGPT — 33%, GitHub Copilot — 23%, а интерфейсы делятся почти поровну между браузером, IDE и командной строкой;
🔘 56% пользователей ИИ применяют его только для советов в чате;
🔘 работа с агентами остаётся поднадзорной: 59% просят сгенерировать код и вносят правки сами, 44% разрешают править файлы и запускать команды по прямому указанию, и только 27% дают довести до конца многошаговую задачу;
🔘 официальная документация Django остаётся главным источником обучения с 67%, но ИИ-инструменты уже вторые с 51% — впереди YouTube, чтения исходников и Stack Overflow.
@zen_of_python
28 августа Django Software Foundation и PyCharm опубликовали ежегодный The State of Django: почти 3500 ответов из более чем 40 стран, от студентов до людей с десятилетиями стажа.
Ядро держится на месте, и авторы называют это комплиментом: зрелое, но не застывшее. PostgreSQL держит 76–79% пятый год подряд, штатный шаблонизатор — около 80%, а 43% опрошенных уже перешли на Django 6.0 через несколько месяцев после выхода.
Меняется обвязка. Совсем без ИИ-инструментов работают 10% опрошенных; из тех, кто ими пользуется, 58% делают это ежедневно и ещё 27% несколько раз в неделю.
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
uv экономит место в кэше и проверяет архив до распаковки
Менеджер пакетов uv получил две правки для кэша. Одна сокращает число одинаковых распакованных файлов, другая останавливает архив с неверным хешем до записи его содержимого.
Изменения вошли в версию 0.12.7. Новая preview-функция
Проверка архивов с исходниками тоже сдвинулась раньше. Если хеш не совпадает с ожидаемым, uv отклоняет архив до попадания распакованных файлов в кэш. В прежнем порядке повреждённый или подменённый архив успевал там осесть.
Ещё релиз добавляет разрешение зависимостей для платформ
@zen_of_python
Менеджер пакетов uv получил две правки для кэша. Одна сокращает число одинаковых распакованных файлов, другая останавливает архив с неверным хешем до записи его содержимого.
Изменения вошли в версию 0.12.7. Новая preview-функция
content-addressed-cache дедуплицирует распакованные wheel по содержимому. Одинаковые файлы теперь могут храниться в одной копии вместо десятка повторов в кэше.Проверка архивов с исходниками тоже сдвинулась раньше. Если хеш не совпадает с ожидаемым, uv отклоняет архив до попадания распакованных файлов в кэш. В прежнем порядке повреждённый или подменённый архив успевал там осесть.
Ещё релиз добавляет разрешение зависимостей для платформ
s390x, ppc64le и loongarch64. К 30 августа релиз отметили реакциями 22 человека.@zen_of_python
🎉4