PyArrow — Python-библиотека для больших таблиц и колоночных данных Apache Arrow. Она читает файлы Parquet и помогает передавать данные между pandas, Polars, аналитическими движками и хранилищами без лишних преобразований.
В PyArrow 25 появились новые возможности для тензоров и шифрования Parquet:
🔘
🔘 списки многомерных массивов превращаются в
🔘 Parquet получил прямой API для ключей шифрования и расшифровки;
🔘
Python-реализация Feather получила статус устаревшей. Сам формат продолжит работать через общий стек Arrow IPC. В релиз вошли 268 коммитов от 66 участников.
@zen_of_python
В PyArrow 25 появились новые возможности для тензоров и шифрования Parquet:
Table преобразуется в Arrow Tensor;FixedShapeTensor;pa.OSFile принимает обычный файловый дескриптор.Python-реализация Feather получила статус устаревшей. Сам формат продолжит работать через общий стек Arrow IPC. В релиз вошли 268 коммитов от 66 участников.
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2
Ruff — быстрый линтер и форматтер Python-кода. Он находит типичные ошибки, следит за стилем и импортами и автоматически исправляет часть замечаний.
В версии 0.15.21 появился экспериментальный флаг
Новое preview-правило
@zen_of_python
В версии 0.15.21 появился экспериментальный флаг
--add-ignore. Он добавляет ruff:ignore к выбранной строке и отключает правило только в этом месте.Новое preview-правило
UP051 находит устаревшие декораторы из abc и предлагает замену. Команда ruff format получила --extend-exclude для дополнительных исключений. Проверка Jupyter Notebook теперь ловит синтаксические ошибки отдельно в каждой ячейке. В релиз также вошли оптимизации и исправления автофиксов.@zen_of_python
👍8
PyTorch — Python-библиотека для обучения и запуска нейросетей на процессорах и ускорителях. Версия 2.13 снижает расход памяти при обучении языковых моделей, ускоряет разреженное внимание на Mac и загружает safetensors напрямую.
🔘
🔘 FlexAttention заработал на Apple Silicon;
🔘
🔘 появились Linux wheels для предварительных Python 3.15 и свободнопоточного 3.15t.
Заявленное ускорение FlexAttention примерно в 12 раз получено на конкретном разреженном шаблоне. Для плотного внимания SDPA остаётся быстрее. Сборки для Python 3.15 пока лежат в отдельном индексе PyTorch, а
@zen_of_python
nn.LinearCrossEntropyLoss объединяет последний линейный слой и функцию потерь, сокращая пиковый расход GPU-памяти до четырёх раз на моделях с большим словарём;torch.load() открывает safetensors без отдельной библиотеки;Заявленное ускорение FlexAttention примерно в 12 раз получено на конкретном разреженном шаблоне. Для плотного внимания SDPA остаётся быстрее. Сборки для Python 3.15 пока лежат в отдельном индексе PyTorch, а
torch.compile с этой версией языка ещё не работает.@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤3
uv — пакетный менеджер и резолвер зависимостей для Python на Rust. Релиз 0.11.31 опубликован 22 июля и заметно докручивает workspace-сценарии и безопасность установки.
🔘 workspace-источники теперь могут ссылаться по пути на участников другого workspace, а .venv — указывать на централизованные окружения проектов;
🔘 в preview появилась настройка hash-algorithm на уровне конкретного индекса при генерации lockfile;
🔘 у uv audit — параметры audit.malware-check и audit.malware-check-url;
🔘 установщик отклоняет wheel и source-архивы, у которых имя пакета не совпадает с заявленным, включая обход через symlink-пути;
🔘 uv больше не повторяет запросы после ошибок проверки TLS-сертификата и вычищает учётные данные из ошибок Git fetch;
🔘 резолвер избавился от квадратичной работы при дедупликации транзитивных конфликтов.
Централизованные окружения через .venv-ссылку выглядят как шаг к «одна машина — один кэш окружений». Держите .venv в каждом проекте или уже пробовали выносить окружения в одно место?
@zen_of_python
Централизованные окружения через .venv-ссылку выглядят как шаг к «одна машина — один кэш окружений». Держите .venv в каждом проекте или уже пробовали выносить окружения в одно место?
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
OpenCode: ИИ-агент для Python в терминале, который не уводит код в облако
Если вы предпочитаете командную строку графическим IDE, OpenCode может оказаться удобнее: он работает как TUI прямо в консоли, понимает контекст Python-проекта и рефакторит код с учётом всей кодовой базы, а не вставленного фрагмента.
Для питониста тут два полезных момента. Первый — локальность: провайдер подключается из вашей среды, файлы остаются на вашей машине. Второй: встроенный Pyright и режимы Plan/Build, которые либо показывают план правок, либо применяют его сразу. Ещё AGENTS.md позволяет явно прописать правила проекта: от стиля до команд запуска.
Для старта достаточно бесплатного ключа Gemini. Подробности в обзоре.
Если вы предпочитаете командную строку графическим IDE, OpenCode может оказаться удобнее: он работает как TUI прямо в консоли, понимает контекст Python-проекта и рефакторит код с учётом всей кодовой базы, а не вставленного фрагмента.
Для питониста тут два полезных момента. Первый — локальность: провайдер подключается из вашей среды, файлы остаются на вашей машине. Второй: встроенный Pyright и режимы Plan/Build, которые либо показывают план правок, либо применяют его сразу. Ещё AGENTS.md позволяет явно прописать правила проекта: от стиля до команд запуска.
Для старта достаточно бесплатного ключа Gemini. Подробности в обзоре.
❤3
OpenCode: ИИ-агент для Python в терминале, который не уводит код в облако
Если вы предпочитаете командную строку графическим IDE, OpenCode может оказаться удобнее: он работает как TUI прямо в консоли, понимает контекст Python-проекта и рефакторит код с учётом всей кодовой базы, а не вставленного фрагмента.
Для питониста тут два полезных момента. Первый — локальность: провайдер подключается из вашей среды, файлы остаются на вашей машине. Второй: встроенный Pyright и режимы Plan/Build, которые либо показывают план правок, либо применяют его сразу. Ещё AGENTS.md позволяет явно прописать правила проекта: от стиля до команд запуска.
Для старта достаточно бесплатного ключа Gemini. Подробности в обзоре.
Если вы предпочитаете командную строку графическим IDE, OpenCode может оказаться удобнее: он работает как TUI прямо в консоли, понимает контекст Python-проекта и рефакторит код с учётом всей кодовой базы, а не вставленного фрагмента.
Для питониста тут два полезных момента. Первый — локальность: провайдер подключается из вашей среды, файлы остаются на вашей машине. Второй: встроенный Pyright и режимы Plan/Build, которые либо показывают план правок, либо применяют его сразу. Ещё AGENTS.md позволяет явно прописать правила проекта: от стиля до команд запуска.
Для старта достаточно бесплатного ключа Gemini. Подробности в обзоре.
🙈3❤2
В pyvenv.cfg предлагают записывать версию Python — появился PEP 838
Версию интерпретатора в pyvenv.cfg каждый инструмент записывает по-своему: где-то это поле version, где-то version_info, причём с patch-версией, которая устаревает после обновления интерпретатора. PEP 838, созданный 15 июля, предлагает навести здесь порядок к Python 3.16.
🔘 новый ключ python-version записывает только major и minor, например 3.16 — patch-обновления его не ломают;
🔘 создатели окружений должны будут писать python-version, чтение старых полей предлагается считать нежелательным;
🔘 интерпретатор сможет отказаться запускаться из окружения, если major/minor не совпадают;
🔘 окружения без нового ключа разрешено обрабатывать по старым полям или проверять через сам интерпретатор.
Автор PEP — Константин Шютце, референсные реализации уже перечислены для uv, virtualenv и CPython. Статус пока Draft.
Ловили ситуацию, когда venv молча работал с другой версией Python, чем ожидалось?
@zen_of_python
Версию интерпретатора в pyvenv.cfg каждый инструмент записывает по-своему: где-то это поле version, где-то version_info, причём с patch-версией, которая устаревает после обновления интерпретатора. PEP 838, созданный 15 июля, предлагает навести здесь порядок к Python 3.16.
Автор PEP — Константин Шютце, референсные реализации уже перечислены для uv, virtualenv и CPython. Статус пока Draft.
Ловили ситуацию, когда venv молча работал с другой версией Python, чем ожидалось?
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Robot Framework — фреймворк тестовой автоматизации на Python с keyword-driven синтаксисом. Первая бета версии 7.5 вышла 17 июля и открывает новый feature-цикл.
🔘 Libdoc понимает Markdown, а аргументы, возвращаемые значения и исключения можно документировать в Google Style — результат конвертируется в HTML;
🔘 тесты и tasks можно встраивать в Markdown-файлы через fenced-блоки robotframework, файлы .robot.md распознаются автоматически;
🔘 пользовательские console loggers регистрируются через --console и используют API listeners, Rebot поддерживает тот же механизм;
🔘 TimeoutExceeded теперь наследуется от BaseException — случайный except Exception: его больше не проглотит;
🔘 объявлены устаревшими встроенный Testdoc и неоднозначные tag patterns вроде XORY.
Пишете автотесты на Robot Framework или в вашей команде победил чистый pytest?
@zen_of_python
Пишете автотесты на Robot Framework или в вашей команде победил чистый pytest?
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
👎2✍1
Forwarded from Представляешь,
Видеофайл на 50 КБ может выполнить код на вашем устройстве
В FFmpeg нашли 16-летнюю уязвимость PixelSmash. Она живёт в декодере MagicYUV: AVI, MKV или MOV размером с картинку вызывает запись за пределами буфера и открывает удалённое выполнение кода. Серьёзность: 8.8 из 10 по шкале CVSS, то есть «высокая».
MagicYUV включён везде по умолчанию «для вашего удобства». Поэтому плееры, мессенджеры, NAS и облачные транскодеры принимают вредоносное видео без вопросов, лишь бы система сгенерировала превью.
Проверьте себя командой из материала: если в выводе есть magicyuv, обновите FFmpeg или пересоберите с флагом --disable-decoder=magicyuv. За 16 лет она успела разойтись повсюду.
В FFmpeg нашли 16-летнюю уязвимость PixelSmash. Она живёт в декодере MagicYUV: AVI, MKV или MOV размером с картинку вызывает запись за пределами буфера и открывает удалённое выполнение кода. Серьёзность: 8.8 из 10 по шкале CVSS, то есть «высокая».
MagicYUV включён везде по умолчанию «для вашего удобства». Поэтому плееры, мессенджеры, NAS и облачные транскодеры принимают вредоносное видео без вопросов, лишь бы система сгенерировала превью.
Проверьте себя командой из материала: если в выводе есть magicyuv, обновите FFmpeg или пересоберите с флагом --disable-decoder=magicyuv. За 16 лет она успела разойтись повсюду.
😱4❤2
18 июля вышла последняя запланированная бета Python 3.15: около 298 исправлений, сборок и правок документации с прошлой беты. Дальше по плану релиз-кандидат 4 августа.
Что приедет в 3.15:
🔘 PEP 810 — явные ленивые импорты ради быстрого старта;
🔘 PEP 814 добавляет встроенный тип frozendict, а PEP 661 — тип sentinel;
🔘 PEP 799 приносит отдельный пакет для профилирования и Tachyon, семплирующий профилировщик высокой частоты;
🔘 PEP 686 делает UTF-8 кодировкой по умолчанию;
🔘 PEP 831 включает фреймовые указатели по умолчанию, чтобы системные профилировщики видели стек Python;
🔘 JIT заметно подтянули: 8–9% среднего геометрического прироста на x86-64 Linux против обычного интерпретатора и 12–13% на AArch64 macOS против интерпретатора с хвостовыми вызовами;
🔘 официальные 64-битные сборки под Windows перешли на интерпретатор с хвостовыми вызовами, а сборки под macOS теперь ставят поддержку свободной от GIL версии по умолчанию.
Команда просит библиотеки протестироваться на бете и выложить пререлизные колёса, но обычные прод-релизы советует придержать до 3.15.0rc1: ABI после четвёртой беты меняться не должен, гарантий до кандидата всё же нет.
Уже гоняли свои проекты на 3.15 или ждёте финального релиза 1 октября?
@zen_of_python
Что приедет в 3.15:
Команда просит библиотеки протестироваться на бете и выложить пререлизные колёса, но обычные прод-релизы советует придержать до 3.15.0rc1: ABI после четвёртой беты меняться не должен, гарантий до кандидата всё же нет.
Уже гоняли свои проекты на 3.15 или ждёте финального релиза 1 октября?
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
FastAPI выпустил три релиза за четыре дня, и все про одно: сколько памяти съедает система зависимостей.
Началось с разбора от пользователя, который собрал приложение с цепочкой из ста вложенных Depends и эндпоинтами на десятки параметров. Реальные проекты с большими графами зависимостей выглядят похоже, только менее наглядно.
🔘 в 0.140.0 от 24 июля класс Dependant разгрузили: вспомогательные функции с кешами вынесли наружу, объект теперь просто хранит данные. Бенчмарк памяти на графе зависимостей упал с 17,5 МБ до 1,1 МБ;
🔘 в 0.140.1 от 27 июля предел lru_cache для классификации вызываемых объектов подняли с 1024 до 4096: нашлись приложения, где зависимостей заметно больше тысячи, а на переполненном кеше выигрыш терялся;
🔘 в 0.140.2 в тот же день перестали удерживать плоские деревья зависимостей: бенчмарк графа маршрута ужался с 575 до 110,7 КБ.
Заодно в CI добавили замер памяти, так что рост потребления теперь виден прямо в пул-реквесте, а не в проде через полгода.
Замеряете память своих сервисов в CI или ловите такое уже на боевых машинах?
@zen_of_python
Началось с разбора от пользователя, который собрал приложение с цепочкой из ста вложенных Depends и эндпоинтами на десятки параметров. Реальные проекты с большими графами зависимостей выглядят похоже, только менее наглядно.
Заодно в CI добавили замер памяти, так что рост потребления теперь виден прямо в пул-реквесте, а не в проде через полгода.
Замеряете память своих сервисов в CI или ловите такое уже на боевых машинах?
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
✍5❤2👏1
Донхи На и Никита Соболев предложили PEP 841: запись f{1, 2, 3} создаёт frozenset, f{'a': 1} создаёт frozendict, f{} даёт пустой frozendict. Черновик написан 16 июля, обсуждение открыли 20 июля, целятся в Python 3.16.
Сейчас frozenset({1, 2, 3}) сначала собирает обычное множество, потом копирует его в неизменяемое, и на каждом выполнении ищет имя frozenset в области видимости. Соптимизировать это компилятор не может: имя могут переопределить, а у вызова могут быть побочные эффекты. Один частный случай CPython уже спрямляет, но только справа от in. Присвойте тот же литерал переменной, и оптимизация исчезает.
Что предлагает PEP:
🔘 неизменяемость гарантирует сама грамматика, поэтому её не приходится выводить из того, как значение используется дальше;
🔘 константный f{...} сворачивается в один LOAD_CONST и попадает в .pyc, так что на каждом следующем выполнении конструирование бесплатно;
🔘 добавляются токен FLBRACE, четыре узла AST и две инструкции байткода: BUILD_FROZENSET и BUILD_FROZENMAP;
🔘 работают и генераторные выражения: f{x for x in xs}, f{k: v for k, v in items}, а также распаковка f{*xs} и f{**d};
🔘 f{ сегодня синтаксическая ошибка, поэтому старый код ничего не теряет. Запись f {1} с пробелом ошибкой и останется, путаницы с f-строками нет;
🔘 в стандартной библиотеке авторы насчитали около 105 вызовов frozenset и 65 вызовов frozendict, из них 46 и 22 можно переписать новой записью.
Большая цель за синтаксисом — подтолкнуть людей к неизменяемым контейнерам перед эпохой сборок без GIL и субинтерпретаторов: субинтерпретаторы уже делят между собой frozenset, на очереди frozendict. Про JIT авторы намеренно ничего не обещают, потому что руководящий совет в июне запретил новую разработку JIT в main до принятия отдельного PEP.
Читается ли f{1, 2, 3} лучше, чем frozenset({1, 2, 3}), или лишний префикс только запутает?
@zen_of_python
Сейчас frozenset({1, 2, 3}) сначала собирает обычное множество, потом копирует его в неизменяемое, и на каждом выполнении ищет имя frozenset в области видимости. Соптимизировать это компилятор не может: имя могут переопределить, а у вызова могут быть побочные эффекты. Один частный случай CPython уже спрямляет, но только справа от in. Присвойте тот же литерал переменной, и оптимизация исчезает.
Что предлагает PEP:
Большая цель за синтаксисом — подтолкнуть людей к неизменяемым контейнерам перед эпохой сборок без GIL и субинтерпретаторов: субинтерпретаторы уже делят между собой frozenset, на очереди frozendict. Про JIT авторы намеренно ничего не обещают, потому что руководящий совет в июне запретил новую разработку JIT в main до принятия отдельного PEP.
Читается ли f{1, 2, 3} лучше, чем frozenset({1, 2, 3}), или лишний префикс только запутает?
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10🔥2😍2