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
Ruff замечает синхронный HTTP-запрос внутри async-функции
Линтер Ruff получил проверку синхронных HTTP-запросов внутри асинхронных функций. Она показывает место, где один обычный вызов может остановить событийный цикл всего сервиса.
Новое правило
В preview появились селекторы категорий правил. С ними можно включать целые группы проверок вместо перечисления отдельных кодов.
Релиз также уточняет две существующие проверки.
@zen_of_python
Линтер Ruff получил проверку синхронных HTTP-запросов внутри асинхронных функций. Она показывает место, где один обычный вызов может остановить событийный цикл всего сервиса.
Новое правило
ASYNC210 вошло в версию 0.16.5. Такая ошибка легко прячется в коде: функция объявлена через async, однако блокирующий запрос задерживает выполнение остальных задач. Из-за этого асинхронный сервис незаметно теряет ожидаемое поведение под нагрузкой.В preview появились селекторы категорий правил. С ними можно включать целые группы проверок вместо перечисления отдельных кодов.
Релиз также уточняет две существующие проверки.
DTZ007 перестал ругаться на безопасные цепочки strptime с таймзоной. Отдельно SIM401 теперь учитывает побочные эффекты в аргументах по умолчанию у lambda.@zen_of_python
GitHub
Release 0.16.5 · astral-sh/ruff
Release Notes
Released on 2026-08-27.
Preview features
Allow rules without codes (#28049)
Introduce category selectors (#27666)
Update preview default rules and categories (#27877)
Bug fixes
[fl...
Released on 2026-08-27.
Preview features
Allow rules without codes (#28049)
Introduce category selectors (#27666)
Update preview default rules and categories (#27877)
Bug fixes
[fl...
🔥7❤1
В документации Python появилась таблица цены каждой операции со встроенными типами
Сколько стоит
Такое сохраняют: половина вопросов «почему тормозит» на ревью и собеседованиях закрывается этой таблицей.
Страница в документации
@zen_of_python
Сколько стоит
l.insert(), почему l.pop() дешёвый, а l.pop(0) нет и чем x in set отличается от x in list — раньше за этим ходили в вики или в исходники CPython. Теперь в документации 3.16 есть отдельная страница: сложность операций для list, tuple, dict, set, str, memoryview и range в нотации O-большое, с оговорками о том, где поведение зависит от реализации CPython.Такое сохраняют: половина вопросов «почему тормозит» на ревью и собеседованиях закрывается этой таблицей.
Страница в документации
@zen_of_python
🔥16❤🔥2
Python Tutor прокручивает вашу программу по шагам прямо в браузере
Результат неверный, а где именно состояние поехало — непонятно, и код обрастает
Ставить ничего не нужно, регистрации нет, код вставляется прямо на странице. Кроме Python поддерживаются Java, C, C++ и JavaScript. С 2010 года сервисом воспользовались больше 25 млн человек, он построил свыше 500 млн визуализаций.
В нашем канале «Точка входа» разобрали подробнее.
Результат неверный, а где именно состояние поехало — непонятно, и код обрастает
print. Python Tutor запускает программу на pythontutor.com и позволяет ходить по шагам вперёд и назад: видно значения переменных, как меняются списки и словари, какие объекты друг на друга ссылаются, какая функция выполняется и откуда её вызвали.Ставить ничего не нужно, регистрации нет, код вставляется прямо на странице. Кроме Python поддерживаются Java, C, C++ и JavaScript. С 2010 года сервисом воспользовались больше 25 млн человек, он построил свыше 500 млн визуализаций.
В нашем канале «Точка входа» разобрали подробнее.
🔥1
Вышел Python 3.15.0rc2: до финала 1 октября осталось проверить свои пакеты
Второй релиз-кандидат опубликован 1 сентября: 144 исправления от 76 участников после rc1. Главное в нём то, чего уже не будет: ABI заморожен, и wheels, собранные на rc2, будут работать с финальной 3.15 и всеми её патч-версиями. Значит, мейнтейнеры расширений на C могут собирать и выкладывать колёса под 3.15 уже сейчас.
🔘 экспериментальный JIT даёт в среднем 8–9% к обычному интерпретатору на x86-64 Linux и 12–13% к tail-calling-интерпретатору на AArch64 macOS, разработчики просят прогнать на нём свои нагрузки и сообщить о регрессиях
🔘 в прод rc2 ставить не рекомендуют, для CI и тестов совместимости он и предназначен
Ставится через
Что означает заморозка ABI, сколько даёт JIT и что проверить мейнтейнеру разобрали на сайте.
@zen_of_python
Второй релиз-кандидат опубликован 1 сентября: 144 исправления от 76 участников после rc1. Главное в нём то, чего уже не будет: ABI заморожен, и wheels, собранные на rc2, будут работать с финальной 3.15 и всеми её патч-версиями. Значит, мейнтейнеры расширений на C могут собирать и выкладывать колёса под 3.15 уже сейчас.
Ставится через
uv python install 3.15.0rc2 или с python.org.Что означает заморозка ABI, сколько даёт JIT и что проверить мейнтейнеру разобрали на сайте.
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
Python.org
Python Release Python 3.15.0rc2
The official home of the Python Programming Language
❤2👍1
uv 0.12.9 закрыл проблему с памятью при чтении чужих wheel и добавил CPython 3.15.0rc2
Релиз 1 сентября. Из важного:
🔘 обновлён
🔘 чувствительные заголовки больше не утекают при редиректах между зонами аутентификации, включая смену схемы на том же хосте;
🔘 секреты в подписанных URL вырезаются из диагностики повторов;
🔘 новые флаги
🔘 холодная установка wheel быстрее: каждый ZIP распаковывается в одной блокирующей задаче с переиспользованием буферов;
🔘 добавлен CPython 3.15.0rc2.
Если ставите пакеты из сторонних индексов, обновляйтесь. Заметки к релизу.
@zen_of_python
Релиз 1 сентября. Из важного:
async_http_range_reader до 0.11.1: закрыта потенциальная проблема memory-safety при чтении метаданных из недоверенных wheel по HTTP range;--no-locked и --no-frozen отключают режимы из UV_LOCKED и UV_FROZEN на один вызов, а --locked, --frozen, --check теперь важнее переменных окружения;Если ставите пакеты из сторонних индексов, обновляйтесь. Заметки к релизу.
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥1
Повторите 44% на ARC-AGI-1 на PyTorch за полтора часа и 67 центов
ARC-AGI-1 это тысяча задач на цветных сетках, где по паре примеров нужно угадать правило. Митхил Вакде обучил трансформер на 75 млн параметров с нуля и получил 44% на публичном eval за 1,5 часа на RTX 5090. Код открыт под MIT.
🔘 задачи превращаются в последовательности токенов, модель учится авторегрессионно;
🔘 обучение во время теста: на train- и eval-задачах при скрытых ответах;
🔘 обучаемые 3D RoPE для двумерных сеток и отдельный additive embedding на задачу;
🔘 8 слоёв, SwiGLU вместо GELU, RMSNorm вместо LayerNorm, flash attention с varlen на обучении, flex attention на inference;
🔘 удаление обучения на входных токенах подняло результат с 40% до 44%, автор пишет «я не понимаю почему»;
🔘 нужны CUDA выше 12.8, лучше 13.0; на ARC-2 та же модель даёт 7%.
Репозиторий mdlARC, ограничения замера разобрали на сайте.
@zen_of_python
ARC-AGI-1 это тысяча задач на цветных сетках, где по паре примеров нужно угадать правило. Митхил Вакде обучил трансформер на 75 млн параметров с нуля и получил 44% на публичном eval за 1,5 часа на RTX 5090. Код открыт под MIT.
Репозиторий mdlARC, ограничения замера разобрали на сайте.
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
PyTorch 2.14 уже собран под Python 3.15, но компилировать модели под ним пока нельзя
PyTorch Foundation выпустила 2.14: 2995 коммитов от 487 участников.
🔘 wheels для Python 3.15 и free-threaded 3.15t есть для Linux, Windows и macOS, но лежат на download․pytorch․org, не на PyPI;
🔘
🔘
🔘 удалены
🔘 у скалярного
Сам Python 3.15 выходит 1 октября, второй rc был 1 сентября, так что проверить совместимость кода можно уже сейчас, а замеры с компиляцией придётся отложить. Чек-лист обновления на сайте.
@zen_of_python
PyTorch Foundation выпустила 2.14: 2995 коммитов от 487 участников.
torch.compile под 3.15 в этом релизе не работает и завершается RuntimeError, только eager;torch.switch обобщает torch.cond на несколько веток, torch.while_loop захватывается CUDA Graphs;torch.cholesky, torch.qr, параметр профилировщика use_cuda; acc_policy="balanced" теперь ValueError;clamp градиент на границе стал 0 вместо 1, модели с клиппингом могут учиться иначе.Сам Python 3.15 выходит 1 октября, второй rc был 1 сентября, так что проверить совместимость кода можно уже сейчас, а замеры с компиляцией придётся отложить. Чек-лист обновления на сайте.
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Polars 2.0 RC: после обновления ваши
Polars выпустила первый release candidate версии 2.0. Автор библиотеки Ричи Винк пишет, что релиз должен быть «скучным»: новых функций почти нет, меняются дефолты. Главный из них:
Вторая часть релиза про то, чтобы падать сразу, а не через 20 минут работы пайплайна.
Поставить в отдельное окружение:
@zen_of_python
join и group_by могут вернуть строки в другом порядкеPolars выпустила первый release candidate версии 2.0. Автор библиотеки Ричи Винк пишет, что релиз должен быть «скучным»: новых функций почти нет, меняются дефолты. Главный из них:
LazyFrame.collect() теперь идёт через потоковый движок, который обрабатывает данные порциями. Авторы ожидают, что в совокупности он «легко в 5 раз быстрее», но порядок строк после join, group_by и unpivot он не гарантирует. Если код молча полагался на порядок, например брал head(1) после группировки, добавьте maintain_order (у join и group_by) или явный sort. Старый движок возвращается через pl.Config.set_engine_affinity("in-memory").Вторая часть релиза про то, чтобы падать сразу, а не через 20 минут работы пайплайна.
is_in между Int64 и Float64 больше не округляет молча: 9007199254740993 раньше превращался в 9007199254740992 и давал ложное совпадение, теперь InvalidOperationError. Горизонтальный concat таблиц разной высоты бросает ShapeError вместо заполнения null. Вместо cast(pl.Date) только .str.to_date(), вместо каста целых в Enum только .cat.to(). В CSV без заголовка колонки теперь нумеруются с column_0. Большинство удалённых методов отвечают AttributeRemovedError с подсказкой, чем заменить.Поставить в отдельное окружение:
pip install polars==2.0rc1. Чек-лист, что проверить до финального релиза, собрали на сайте.@zen_of_python
Что происходит между
🔘
🔘
🔘 реестр встроенных ufunc порождается скриптом
🔘 циклы собираются в нескольких вариантах под наборы инструкций (
Какой вариант реально работает у вас, покажет
@zen_of_python
np.add(a, b) и SIMD-циклом: разбор пути одного вызоваnp.add не функция Python, а объект C-типа numpy.ufunc с 22 сигнатурами в np.add.types. Файт Хеллер прослеживает, что происходит с вызовом для dd->d, двух массивов float64.ufunc_generic_vectorcall и ufunc_generic_fastcall проверяют overrides и конвертируют аргументы;promote_and_get_ufuncimpl и resolve_descriptors выбирают реализацию и dtype результата;generate_umath.py в файл __umath_generated.c; для add bool-цикл переиспользует logical_or, а object-массивы уходят в PyNumber_Add;X86_V2, X86_V3, NEON, ASIMD), и нужный выбирается при импорте.Какой вариант реально работает у вас, покажет
numpy.lib.introspect.opt_func_info(func_name="add", signature="float64").@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
После обновления на Polars 2.0 ваши join и group_by могут вернуть строки в другом порядке
Ричи Винк выпустил первый release candidate Polars 2.0 и сам называет релиз скучным: новых функций почти нет, мажорную версию подняли, чтобы избавиться от старых решений и поменять дефолты.
Главная смена дефолта: все запросы
Если код где-то молча полагался на порядок после
Ричи Винк выпустил первый release candidate Polars 2.0 и сам называет релиз скучным: новых функций почти нет, мажорную версию подняли, чтобы избавиться от старых решений и поменять дефолты.
Главная смена дефолта: все запросы
LazyFrame теперь идут через потоковый движок, который обрабатывает данные порциями. В совокупности авторы ожидают «легко в 5 раз быстрее» и заметно меньше памяти. Плата за это в том, что порядок строк после операций больше не гарантирован.Если код где-то молча полагался на порядок после
join или group_by, он сломается тихо. К релизу выложен полный migration guide, и заглянуть в него стоит до того, как обновитесь.Polars
Pre-release of Polars 2.0
Preview of Python Polars 2.0, bringing the streaming engine to all lazy queries
Почему CPython остаётся стековой машиной, а её соседи уходят на регистры
Байткод CPython стековый:
Замеры честные: 11 чередующихся запусков, медиана, повтор набора; в сравнении участвовал и CPython 3.14.6, но автор оговаривает разную семантику языков. Вывод один: в интерпретаторе главный рычаг это число инструкций на диспетчеризацию. Как устроено новое 64-битное слово инструкции и почему Lua ограничена 255 регистрами на фрейм, на сайте.
@zen_of_python
Байткод CPython стековый:
a + b это LOAD_FAST a, LOAD_FAST b, BINARY_OP. Максим Шевалье-Буавер, в прошлом автор YJIT для Ruby, измерила на своём языке Plush, сколько стоит такая модель: после перехода на регистровый байткод, где то же сложение одна инструкция с тремя операндами, медианное ускорение по тестам составило 2,07 раза, максимальное 3,37, а тесты сборщика мусора не изменились вовсе.Замеры честные: 11 чередующихся запусков, медиана, повтор набора; в сравнении участвовал и CPython 3.14.6, но автор оговаривает разную семантику языков. Вывод один: в интерпретаторе главный рычаг это число инструкций на диспетчеризацию. Как устроено новое 64-битное слово инструкции и почему Lua ограничена 255 регистрами на фрейм, на сайте.
@zen_of_python
CPython официально поддерживает RISC-V как платформу третьего уровня
Работа шла несколько месяцев, и теперь RISC-V официально поддержан в CPython как tier 3. Для питониста это означает, что сборки под эту архитектуру перестали быть самодеятельностью и попали в зону ответственности проекта.
RISC-V это открытая система команд: в отличие от x86 и ARM, она развивается как открытый стандарт, и реализовать её может кто угодно. Экосистема за последние годы выросла заметно.
Третий уровень означает поддержку без гарантий на каждый релиз: сборка проверяется, но падение на этой платформе не блокирует выпуск. Для продакшена на RISC-V это ещё не зелёный свет, а сигнал, что можно начинать проверять свои колёса.
#cpython
Работа шла несколько месяцев, и теперь RISC-V официально поддержан в CPython как tier 3. Для питониста это означает, что сборки под эту архитектуру перестали быть самодеятельностью и попали в зону ответственности проекта.
RISC-V это открытая система команд: в отличие от x86 и ARM, она развивается как открытый стандарт, и реализовать её может кто угодно. Экосистема за последние годы выросла заметно.
Третий уровень означает поддержку без гарантий на каждый релиз: сборка проверяется, но падение на этой платформе не блокирует выпуск. Для продакшена на RISC-V это ещё не зелёный свет, а сигнал, что можно начинать проверять свои колёса.
#cpython
Python Insider
RISC-V is now officially supported by CPython! | Python Insider
I’m happy to announce that RISC-V platforms are now officially supported by CPython. 🎉 🚀
Два класса с именем Helper в разных модулях затирают друг другу
Name mangling переименовывает
В нашем канале «Точка входа» разобрали подробнее.
@zen_of_python
__valueName mangling переименовывает
__value в _Helper__value только по имени класса, без учёта модуля. Если два независимых класса Helper хранят __value, а кто-то наследуется от обоих, поле оказывается общим: один кладёт строку, другой число, сложение падает с TypeError. Именно этот пример сейчас обсуждают на форуме разработчиков Python в споре о настоящей приватности; рецепт на сегодня: одно подчёркивание и композиция вместо двойного наследования.В нашем канале «Точка входа» разобрали подробнее.
@zen_of_python
❤1
Документация Python официально вышла на русском языке
Перевод объявлен официально и доступен на docs.python.org. Сделало его сообщество, и это тот случай, когда вклад волонтёров превращается в инфраструктуру языка.
Практический смысл двойной. Своим джунам теперь можно давать ссылку на официальную документацию, а не на пересказ с непонятной родословной. И при споре о терминологии появляется общая опора: как называется вещь по-русски, решает не переводчик статьи, а перевод самой документации.
Отставать от оригинала перевод будет ровно настолько, насколько его перестанут поддерживать, так что если найдёте кривое место, чинится оно пул-реквестом.
Перевод объявлен официально и доступен на docs.python.org. Сделало его сообщество, и это тот случай, когда вклад волонтёров превращается в инфраструктуру языка.
Практический смысл двойной. Своим джунам теперь можно давать ссылку на официальную документацию, а не на пересказ с непонятной родословной. И при споре о терминологии появляется общая опора: как называется вещь по-русски, решает не переводчик статьи, а перевод самой документации.
Отставать от оригинала перевод будет ровно настолько, насколько его перестанут поддерживать, так что если найдёте кривое место, чинится оно пул-реквестом.
Python Insider
The Python documentation is now available in Russian! | Python Insider
The official blog of the Python core development team.
👍5❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Запрограммируй робота на Python и поборись за призовой фонд трека 7 500 000 ₽ на True Tech Champ 2026.
Попробуй себя в треке по программированию роботов. Начать проще, чем кажется: зарегистрируйся, собери команду или объединись с другими участниками на платформе и пройди квалификационный этап до 13 сентября. В онлайн-симуляторе тебе предстоит запрограммировать робособаку для доставки груза через полосу препятствий. Количество попыток не ограничено, а еще тебя будет ждать серия обучающих вебинаров.
Лучшие команды пройдут в финал и будут программировать реальных роботов на офлайн-полигоне, 22 октября, на большой сцене.
Масштабный финал объединит борьбу за призовой фонд, выступления хедлайнеров, доклады спикеров и активности для всех гостей мероприятия.
Рекомендуемые стеки: Go, Java, Python, C#, C++, JS.
Успей зарегистрироваться и пройти квалификацию до 13 сентября.
Erid:2VSb5yJrsAz
Попробуй себя в треке по программированию роботов. Начать проще, чем кажется: зарегистрируйся, собери команду или объединись с другими участниками на платформе и пройди квалификационный этап до 13 сентября. В онлайн-симуляторе тебе предстоит запрограммировать робособаку для доставки груза через полосу препятствий. Количество попыток не ограничено, а еще тебя будет ждать серия обучающих вебинаров.
Лучшие команды пройдут в финал и будут программировать реальных роботов на офлайн-полигоне, 22 октября, на большой сцене.
Масштабный финал объединит борьбу за призовой фонд, выступления хедлайнеров, доклады спикеров и активности для всех гостей мероприятия.
Рекомендуемые стеки: Go, Java, Python, C#, C++, JS.
Успей зарегистрироваться и пройти квалификацию до 13 сентября.
Erid:2VSb5yJrsAz
🔥1
SpaceWeb исполнилось 25 лет — и вместо скучного пресс-релиза компания вместе с Типичным программистом сделала забавную анкету. Вопросы школьные: любимый спорт, лучший друг, обои на рабочий стол. А вокруг — аська, скайп, биткоин и всё остальное, чем жил рунет с 2001 по 2026 год, плюс короткая история веба и самой компании.
В конце — заглянем в будущее, дадим промокод на услуги SpaceWeb и покажем результат заполнения анкеты.
В конце — заглянем в будущее, дадим промокод на услуги SpaceWeb и покажем результат заполнения анкеты.
❤2
Найти повторяющиеся строки просто, а вот решить, что считать одинаковым кодом, уже нет
Задача звучит тривиально: есть исходники, найди последовательности строк, которые встречаются больше одного раза. Автор Arid, чекера дублей для Python, начинал ровно с этой формулировки.
Ответ, как обычно, оказался «зависит от того, что вы имеете в виду». Переименованная переменная, другой порядок аргументов, вынесенный в константу литерал — текстуально это разный код, а по смыслу тот же самый.
Разбор интересен именно этим: как выбрать уровень абстракции, на котором сравнивать, и где проходит граница между дублем и совпадением. Полезно, если у вас в CI стоит проверка на дубли и вы не понимаете её вердиктов.
Задача звучит тривиально: есть исходники, найди последовательности строк, которые встречаются больше одного раза. Автор Arid, чекера дублей для Python, начинал ровно с этой формулировки.
Ответ, как обычно, оказался «зависит от того, что вы имеете в виду». Переименованная переменная, другой порядок аргументов, вынесенный в константу литерал — текстуально это разный код, а по смыслу тот же самый.
Разбор интересен именно этим: как выбрать уровень абстракции, на котором сравнивать, и где проходит граница между дублем и совпадением. Полезно, если у вас в CI стоит проверка на дубли и вы не понимаете её вердиктов.
DEV Community
Detecting Duplicate Python Code Is Harder Than Comparing Text
Detecting Duplicate Python Code Is Harder Than Comparing Text The hard part isn't finding...