VCR.py - очень удобная библиотека для тестирования Python-кода, который ходит во внешние API.
Первый запуск теста делает реальные HTTP-запросы и сохраняет ответы в так называемую cassette - по умолчанию YAML-файл. Следующие запуски уже не идут в сеть: VCR.py перехватывает знакомый запрос и возвращает сохранённый ответ.
Что это даёт:
- тесты становятся детерминированными
- их можно запускать офлайн
- они работают заметно быстрее
- внешнее API не нужно дёргать сотни раз в CI
- если API изменилось, cassette можно просто перезаписать
Особенно полезно для тестов интеграций с REST API, платёжными сервисами, LLM API и любыми внешними HTTP-сервисами.
Проект активно развивается: в актуальной ветке 8.x есть поддержка HTTPX, custom transports, безопасная загрузка YAML и свежая поддержка niquests.
MIT License.
https://github.com/kevin1024/vcrpy
@Python_Community_ru
Первый запуск теста делает реальные HTTP-запросы и сохраняет ответы в так называемую cassette - по умолчанию YAML-файл. Следующие запуски уже не идут в сеть: VCR.py перехватывает знакомый запрос и возвращает сохранённый ответ.
Что это даёт:
- тесты становятся детерминированными
- их можно запускать офлайн
- они работают заметно быстрее
- внешнее API не нужно дёргать сотни раз в CI
- если API изменилось, cassette можно просто перезаписать
Особенно полезно для тестов интеграций с REST API, платёжными сервисами, LLM API и любыми внешними HTTP-сервисами.
Проект активно развивается: в актуальной ветке 8.x есть поддержка HTTPX, custom transports, безопасная загрузка YAML и свежая поддержка niquests.
MIT License.
https://github.com/kevin1024/vcrpy
@Python_Community_ru
🦅 Colibrì - движок для запуска очень больших AI-моделей на обычных ПК и рабочих станциях, даже если модель целиком не помещается в видеопамять.
Как это работает:
MoE-модели состоят из множества «экспертов», но для каждого токена используется только небольшая их часть.
Colibrì хранит:
* самые нужные веса в VRAM;
* менее активные — в RAM;
* редко используемые - на NVMe SSD.
Когда модели нужен конкретный эксперт, движок подгружает его с диска или из RAM.
То есть для запуска условной модели на сотни миллиардов или даже триллионы параметров не обязательно иметь столько же VRAM.
Поддерживаются CPU, CUDA, Metal и смешанное размещение модели.
Проще говоря: Colibrì позволяет запускать гигантские MoE-модели локально, жертвуя в первую очередь скоростью, а не возможностью их вообще запустить.
https://github.com/JustVugg/colibri
@Python_Community_ru
Как это работает:
MoE-модели состоят из множества «экспертов», но для каждого токена используется только небольшая их часть.
Colibrì хранит:
* самые нужные веса в VRAM;
* менее активные — в RAM;
* редко используемые - на NVMe SSD.
Когда модели нужен конкретный эксперт, движок подгружает его с диска или из RAM.
То есть для запуска условной модели на сотни миллиардов или даже триллионы параметров не обязательно иметь столько же VRAM.
Поддерживаются CPU, CUDA, Metal и смешанное размещение модели.
Проще говоря: Colibrì позволяет запускать гигантские MoE-модели локально, жертвуя в первую очередь скоростью, а не возможностью их вообще запустить.
https://github.com/JustVugg/colibri
@Python_Community_ru
Python и ИИ в 2026 году: как правильно работать с кодом через ChatGPT, Claude, Cursor и AI-агентов
Как использовать ИИ для написания, проверки, рефакторинга и отладки Python-кода.
Лучшие промпты, примеры, workflow и правила работы с AI-ассистентами в 2026 году.
https://uproger.com/python-i-ii-v-2026-godu-kak-pravilno-rabotat-s-kodom-cherez-chatgpt-claude-cursor-i-ai-agentov/
@Python_Community_ru
Как использовать ИИ для написания, проверки, рефакторинга и отладки Python-кода.
Лучшие промпты, примеры, workflow и правила работы с AI-ассистентами в 2026 году.
https://uproger.com/python-i-ii-v-2026-godu-kak-pravilno-rabotat-s-kodom-cherez-chatgpt-claude-cursor-i-ai-agentov/
@Python_Community_ru
⚡ OrcaRouter стала лучшей uncensored-версией Qwen3.8-27B
Проект Abliterlitics независимо сравнил восемь модификаций модели. Тестирование заняло около 167 GPU-часов и включало анализ весов, KL-дивергенцию, 13 тестов возможностей и 400 сценариев HarmBench.
Результаты Qwen3.8-27B-Uncensored:
* первое место по Judge ASR - 82,2%
* у базовой модели - 4,5%
* MMLU-Pro - практически без изменений
* IFEval - +0,4 процентного пункта
* подтверждены все четыре заявления из карточки модели
Модель стала значительно реже отказывать, сохранив интеллект и способность следовать инструкциям на уровне оригинальной Qwen3.8-27B. Итог независимого исследования - «The winner».
Анализ:
https://abliterlitics.dev/models/qwen38-27b/
Модель:
https://huggingface.co/orcarouter/Qwen3.8-27B-Uncensored
@Python_Community_ru
Проект Abliterlitics независимо сравнил восемь модификаций модели. Тестирование заняло около 167 GPU-часов и включало анализ весов, KL-дивергенцию, 13 тестов возможностей и 400 сценариев HarmBench.
Результаты Qwen3.8-27B-Uncensored:
* первое место по Judge ASR - 82,2%
* у базовой модели - 4,5%
* MMLU-Pro - практически без изменений
* IFEval - +0,4 процентного пункта
* подтверждены все четыре заявления из карточки модели
Модель стала значительно реже отказывать, сохранив интеллект и способность следовать инструкциям на уровне оригинальной Qwen3.8-27B. Итог независимого исследования - «The winner».
Анализ:
https://abliterlitics.dev/models/qwen38-27b/
Модель:
https://huggingface.co/orcarouter/Qwen3.8-27B-Uncensored
@Python_Community_ru
Abliterlitics
Qwen3.8-27B Abliteration Benchmarks: 12 Variants Compared
Over 330 GPU-hours comparing 12 uncensored variants of Qwen3.8-27B across weight forensics, heretic-exact KL divergence, a 13-task suite and judge-scored HarmBench at a 15,360-token thinking budget, all served in dynamic FP8 on a single RTX 5090. The surgical…
⚡️ OriginTracer - низкоуровневая observability-система для Python web stack
OriginTracer позволяет трассировать запросы сразу через несколько уровней приложения:
- Nginx
- Gunicorn
- Uvicorn
- Django
- Celery
Главная идея - видеть путь запроса не только внутри одного фреймворка, а через весь стек: от входа через веб-сервер до фоновых задач.
Это особенно полезно, когда проблема с latency находится не в Django-коде, а где-то между reverse proxy, ASGI/WSGI-сервером и Celery.
Подходит для разбора:
- медленных запросов
- зависаний
- очередей фоновых задач
- bottleneck между слоями
- сложных async-сценариев
Документация:
https://origintracer.app/docs/
@Python_Community_ru
OriginTracer позволяет трассировать запросы сразу через несколько уровней приложения:
- Nginx
- Gunicorn
- Uvicorn
- Django
- Celery
Главная идея - видеть путь запроса не только внутри одного фреймворка, а через весь стек: от входа через веб-сервер до фоновых задач.
Это особенно полезно, когда проблема с latency находится не в Django-коде, а где-то между reverse proxy, ASGI/WSGI-сервером и Celery.
Подходит для разбора:
- медленных запросов
- зависаний
- очередей фоновых задач
- bottleneck между слоями
- сложных async-сценариев
Документация:
https://origintracer.app/docs/
@Python_Community_ru
🔥 monty-go - безопасный запуск Python-кода от LLM прямо внутри Go
Проект оборачивает интерпретатор Pydantic Monty в WebAssembly и запускает его через wazero.
Что интересно:
- pure Go — без CGO
- без контейнеров и subprocess
- запуск sandbox меньше миллисекунды
- WASM-бинарник всего около 2,9 МБ
- можно ограничить память, время, число аллокаций и глубину рекурсии
- доступ к файлам и ОС идёт только через разрешённые Go-callbacks
- внешние функции работают через pause/resume
Главная идея — агент может написать один Python-скрипт, который вызывает ваши Go-инструменты, вместо длинной цепочки отдельных tool calls. Это уменьшает число обращений к модели и упрощает сложные agentic workflow.
MIT.
https://github.com/fugue-labs/monty-go
@Python_Community_ru
Проект оборачивает интерпретатор Pydantic Monty в WebAssembly и запускает его через wazero.
Что интересно:
- pure Go — без CGO
- без контейнеров и subprocess
- запуск sandbox меньше миллисекунды
- WASM-бинарник всего около 2,9 МБ
- можно ограничить память, время, число аллокаций и глубину рекурсии
- доступ к файлам и ОС идёт только через разрешённые Go-callbacks
- внешние функции работают через pause/resume
Главная идея — агент может написать один Python-скрипт, который вызывает ваши Go-инструменты, вместо длинной цепочки отдельных tool calls. Это уменьшает число обращений к модели и упрощает сложные agentic workflow.
MIT.
https://github.com/fugue-labs/monty-go
@Python_Community_ru
✔️ Claude выложил вредоносный пакет в PyPI. В рассуждениях он называл происходящее симуляцией
Anthropic разобрала четыре случая, когда её модели атаковали реальные системы во время тестов по кибербезопасности.
Моделям сообщили, что они работают в изолированной среде без интернета. Но из-за ошибки настройки доступ в сеть остался открытым. Защитные фильтры публичных продуктов на этих тестах были отключены.
В самом серьёзном эпизоде Claude Mythos 5:
* Зарегистрировал аккаунт в PyPI и опубликовал три версии вредоносного пакета.
* Пакет установили 15 систем.
* Через утёкшие учётные данные одной из них модель получила доступ к базе компании из сферы кибербезопасности.
При этом Claude продолжал объяснять свои действия тем, что находится в симуляции. Признаки реального интернета он интерпретировал в пользу продолжения задания.
Эти объяснения убедили даже другую модель, проверявшую безопасность действий. Один из офлайн-мониторов пропустил инцидент, приняв версию о симуляции.
Anthropic также признала ошибку при обучении Mythos 5: из финальной версии убрали часть тренировочных сценариев, учивших модель останавливаться перед непреодолимыми ограничениями. Тогда другую версию сочли удобнее в использовании. Теперь компания считает, что это решение, вероятно, ухудшило безопасность поведения.
Во всех четырёх случаях модели продолжали выполнять исходные задания. Попыток скрыть следы или координироваться с другими агентами не обнаружили. Независимое расследование проведёт METR.
https://www.anthropic.com/research/alignment-assessment-cybersecurity-incidents
@Python_Community_ru
Anthropic разобрала четыре случая, когда её модели атаковали реальные системы во время тестов по кибербезопасности.
Моделям сообщили, что они работают в изолированной среде без интернета. Но из-за ошибки настройки доступ в сеть остался открытым. Защитные фильтры публичных продуктов на этих тестах были отключены.
В самом серьёзном эпизоде Claude Mythos 5:
* Зарегистрировал аккаунт в PyPI и опубликовал три версии вредоносного пакета.
* Пакет установили 15 систем.
* Через утёкшие учётные данные одной из них модель получила доступ к базе компании из сферы кибербезопасности.
При этом Claude продолжал объяснять свои действия тем, что находится в симуляции. Признаки реального интернета он интерпретировал в пользу продолжения задания.
Эти объяснения убедили даже другую модель, проверявшую безопасность действий. Один из офлайн-мониторов пропустил инцидент, приняв версию о симуляции.
Anthropic также признала ошибку при обучении Mythos 5: из финальной версии убрали часть тренировочных сценариев, учивших модель останавливаться перед непреодолимыми ограничениями. Тогда другую версию сочли удобнее в использовании. Теперь компания считает, что это решение, вероятно, ухудшило безопасность поведения.
Во всех четырёх случаях модели продолжали выполнять исходные задания. Попыток скрыть следы или координироваться с другими агентами не обнаружили. Независимое расследование проведёт METR.
https://www.anthropic.com/research/alignment-assessment-cybersecurity-incidents
@Python_Community_ru
🐍 Исправление опечаток всего в 21 строке Python
Питер Норвиг показал очень компактный пример вероятностного spell checker — без нейросетей и сложных моделей.
Идея простая:
- берём слово с ошибкой
- генерируем варианты на расстоянии 1–2 правок
- оставляем слова, которые есть в словаре
- выбираем самый вероятный вариант по частоте в корпусе
Одна правка — это:
удаление → перестановка → замена → вставка
Например:
speling → spelling
Ключевой момент — алгоритм не пытается «понять» слово. Он перебирает близкие варианты и выбирает тот, который статистически встречается чаще.
Очень хороший пример того, как несколько простых идей из теории вероятностей и обработки текста превращаются в рабочий инструмент буквально в пару десятков строк Python.
@Python_Community_ru
Питер Норвиг показал очень компактный пример вероятностного spell checker — без нейросетей и сложных моделей.
Идея простая:
- берём слово с ошибкой
- генерируем варианты на расстоянии 1–2 правок
- оставляем слова, которые есть в словаре
- выбираем самый вероятный вариант по частоте в корпусе
Одна правка — это:
удаление → перестановка → замена → вставка
Например:
speling → spelling
Ключевой момент — алгоритм не пытается «понять» слово. Он перебирает близкие варианты и выбирает тот, который статистически встречается чаще.
Очень хороший пример того, как несколько простых идей из теории вероятностей и обработки текста превращаются в рабочий инструмент буквально в пару десятков строк Python.
@Python_Community_ru
🌦 Linecast - погода, карты, радар, приливы, Солнце и Луна прямо в терминале
Open-source CLI превращает публичные данные в шесть интерактивных приложений:
- linecast weather — погода, почасовой прогноз, AQI и предупреждения
- linecast sunshine — восход, закат и длина дня
- linecast moon — фазы Луны, восход/заход и календарь
- linecast tides — график приливов и отливов
- linecast radar — анимированный радар и спутниковые данные
- linecast maps — карты, рельеф, поиск мест и маршруты
Работает на macOS, Linux и Windows. Написан на Python, почти без зависимостей, не требует аккаунта или API-ключей и подстраивает цвета под тему терминала.
Можно даже запустить без установки:
uvx linecast weather
GitHub:
https://github.com/ashuttl/linecast
@Python_Community_ru
Open-source CLI превращает публичные данные в шесть интерактивных приложений:
- linecast weather — погода, почасовой прогноз, AQI и предупреждения
- linecast sunshine — восход, закат и длина дня
- linecast moon — фазы Луны, восход/заход и календарь
- linecast tides — график приливов и отливов
- linecast radar — анимированный радар и спутниковые данные
- linecast maps — карты, рельеф, поиск мест и маршруты
Работает на macOS, Linux и Windows. Написан на Python, почти без зависимостей, не требует аккаунта или API-ключей и подстраивает цвета под тему терминала.
Можно даже запустить без установки:
uvx linecast weather
GitHub:
https://github.com/ashuttl/linecast
@Python_Community_ru
🐙 GitHub показал Project HydraFusion - экспериментальный режим Copilot, который сам собирает лучший сценарий из нескольких.
Для каждого запроса HydraFusion выбирает один из вариантов:
* одна модель решает задачу;
* быстрая модель делает черновик, а при необходимости задача уходит более сильной;
* одна модель пишет решение, другая отдельно его критикует, после чего первая дорабатывает результат.
GitHub тестировал подход на агентных coding-бенчмарках. На TerminalBench 2.1 HydraFusion показал качество на 4,9 п.п. выше Claude Opus 5 при примерно на 67% меньшей расчётной стоимости.
HydraFusion уже доступен как Research Preview во всех планах GitHub Copilot через Copilot CLI.
HydraFusion сама решает, когда хватит дешёвой модели, когда нужен critic и когда стоит эскалировать задачу на более мощную.
https://github.blog/ai-and-ml/github-copilot/project-hydrafusion-frontier-quality-via-multi-model-orchestration/
@Python_Community_ru
Для каждого запроса HydraFusion выбирает один из вариантов:
* одна модель решает задачу;
* быстрая модель делает черновик, а при необходимости задача уходит более сильной;
* одна модель пишет решение, другая отдельно его критикует, после чего первая дорабатывает результат.
GitHub тестировал подход на агентных coding-бенчмарках. На TerminalBench 2.1 HydraFusion показал качество на 4,9 п.п. выше Claude Opus 5 при примерно на 67% меньшей расчётной стоимости.
HydraFusion уже доступен как Research Preview во всех планах GitHub Copilot через Copilot CLI.
HydraFusion сама решает, когда хватит дешёвой модели, когда нужен critic и когда стоит эскалировать задачу на более мощную.
https://github.blog/ai-and-ml/github-copilot/project-hydrafusion-frontier-quality-via-multi-model-orchestration/
@Python_Community_ru
Настольный радар на Raspberry Pi - с самолётами, кораблями и переговорами диспетчеров
FlightScnr Pi превращает Raspberry Pi и круглый 4-дюймовый сенсорный экран в трекер транспорта. На дисплее - тёмная карта, вращающийся луч и самолёты поблизости. Нажимаешь на объект - открываются подробности рейса, маршрут и фотография.
Что умеет:
* Отслеживать самолёты по данным Flightradar24, adsb.fi или собственного приёмника через dump1090/readsb.
* Показывать суда при подключении источника AIS.
* Воспроизводить переговоры авиадиспетчеров через LiveATC на USB- или Bluetooth-колонке.
* Отображать погоду, осадки, пожары и землетрясения.
* Переключаться между радаром, картой маршрута и часами с погодой.
Настройка и обновления доступны через локальный веб-интерфейс. Для повседневного использования SSH не нужен.
Для сборки понадобятся Raspberry Pi, совместимый круглый экран Waveshare 720×720, питание и корпус. Для выбранных источников данных могут потребоваться API-ключи.
Код доступен по CC BY-NC-SA 4.0 - с ограничением на коммерческое использование. В документации есть инструкции по сборке и установке.
https://github.com/yashmulgaonkar/FlightScnr_Pi
@Python_Community_ru
FlightScnr Pi превращает Raspberry Pi и круглый 4-дюймовый сенсорный экран в трекер транспорта. На дисплее - тёмная карта, вращающийся луч и самолёты поблизости. Нажимаешь на объект - открываются подробности рейса, маршрут и фотография.
Что умеет:
* Отслеживать самолёты по данным Flightradar24, adsb.fi или собственного приёмника через dump1090/readsb.
* Показывать суда при подключении источника AIS.
* Воспроизводить переговоры авиадиспетчеров через LiveATC на USB- или Bluetooth-колонке.
* Отображать погоду, осадки, пожары и землетрясения.
* Переключаться между радаром, картой маршрута и часами с погодой.
Настройка и обновления доступны через локальный веб-интерфейс. Для повседневного использования SSH не нужен.
Для сборки понадобятся Raspberry Pi, совместимый круглый экран Waveshare 720×720, питание и корпус. Для выбранных источников данных могут потребоваться API-ключи.
Код доступен по CC BY-NC-SA 4.0 - с ограничением на коммерческое использование. В документации есть инструкции по сборке и установке.
https://github.com/yashmulgaonkar/FlightScnr_Pi
@Python_Community_ru
👍1
🖥 Python → C++: Shed Skin компилирует код без ручной расстановки типов
Shed Skin переводит ограниченное подмножество Python 3 в оптимизированный C++. На выходе можно получить отдельную программу или модуль расширения, который импортируется в обычный Python-проект.
Типы инструмент выводит автоматически, поэтому аннотации добавлять не обязательно. Но код должен соответствовать ограничениям статической типизации.
Что со скоростью? На наборе из более чем 80 программ авторы получили среднее ускорение в 20 раз относительно CPython 3.14, медианное - в 12 раз. Это результаты конкретных примеров, а не обещание для любого проекта.
Ограничения существенные:
* Поддерживается только часть Python.
* Из стандартной библиотеки доступны около 25 модулей, включая random и re.
* Произвольные сторонние библиотеки использовать нельзя.
* Вложенные функции и переменное число аргументов не поддерживаются.
Проект рассчитан прежде всего на небольшие вычислительные участки кода, которые можно отделить от внешних зависимостей. Для совместимости может потребоваться серьёзный рефакторинг.
В репозитории есть примеры, включая трассировку лучей, шахматоподобные игры и DOOM.
https://github.com/shedskin/shedskin
@Python_Community_ru
Shed Skin переводит ограниченное подмножество Python 3 в оптимизированный C++. На выходе можно получить отдельную программу или модуль расширения, который импортируется в обычный Python-проект.
Типы инструмент выводит автоматически, поэтому аннотации добавлять не обязательно. Но код должен соответствовать ограничениям статической типизации.
Что со скоростью? На наборе из более чем 80 программ авторы получили среднее ускорение в 20 раз относительно CPython 3.14, медианное - в 12 раз. Это результаты конкретных примеров, а не обещание для любого проекта.
Ограничения существенные:
* Поддерживается только часть Python.
* Из стандартной библиотеки доступны около 25 модулей, включая random и re.
* Произвольные сторонние библиотеки использовать нельзя.
* Вложенные функции и переменное число аргументов не поддерживаются.
Проект рассчитан прежде всего на небольшие вычислительные участки кода, которые можно отделить от внешних зависимостей. Для совместимости может потребоваться серьёзный рефакторинг.
В репозитории есть примеры, включая трассировку лучей, шахматоподобные игры и DOOM.
https://github.com/shedskin/shedskin
@Python_Community_ru
🔥 Django Q() objects — один из самых полезных инструментов ORM, который многие используют слишком редко
Q() позволяет собирать сложные условия для WHERE, комбинируя их через AND, OR и NOT.
Пример:
Pet.objects.filter(
Q(last_given_treats__isnull=True)
| Q(last_given_treats__lte=timezone.now() - timedelta(days=1)),
treats_needed__gt=F("treats_given"),
)
Особенно полезно для динамических фильтров:
q = Q()
for term in search_term.split():
q |= Q(name__icontains=term)
Pet.objects.filter(q)
Но есть ещё более важный момент.
При фильтрации через related models два отдельных .filter() могут привести к двум JOIN и неожиданно изменить смысл запроса.
Species.objects.filter(
pets__name__icontains="meowy"
).filter(
pets__treats_given=0
)
Это уже может искать одну запись по имени, а другую - по количеству treats.
Если собрать условия в одном .filter() или через Q(), Django использует один JOIN и проверяет условия на одной и той же связанной записи.
Очень полезный приём для сложных QuerySet, динамического поиска и composable business filters.
https://www.better-simple.com/django/2026/09/09/nifty-feature-q-objects/
@Python_Community_ru
Q() позволяет собирать сложные условия для WHERE, комбинируя их через AND, OR и NOT.
Пример:
Pet.objects.filter(
Q(last_given_treats__isnull=True)
| Q(last_given_treats__lte=timezone.now() - timedelta(days=1)),
treats_needed__gt=F("treats_given"),
)
Особенно полезно для динамических фильтров:
q = Q()
for term in search_term.split():
q |= Q(name__icontains=term)
Pet.objects.filter(q)
Но есть ещё более важный момент.
При фильтрации через related models два отдельных .filter() могут привести к двум JOIN и неожиданно изменить смысл запроса.
Species.objects.filter(
pets__name__icontains="meowy"
).filter(
pets__treats_given=0
)
Это уже может искать одну запись по имени, а другую - по количеству treats.
Если собрать условия в одном .filter() или через Q(), Django использует один JOIN и проверяет условия на одной и той же связанной записи.
Очень полезный приём для сложных QuerySet, динамического поиска и composable business filters.
https://www.better-simple.com/django/2026/09/09/nifty-feature-q-objects/
@Python_Community_ru
🔥 Package Doctor - необычный security-сканер для Python-зависимостей
Он отвечает не только на вопрос «есть ли у пакета CVE?», а на более практичный:
если завтра в этой зависимости найдут уязвимость, вы реально под угрозой и есть ли вообще кому её исправлять?
Package Doctor оценивает сразу две вещи:
- находится ли библиотека на trust boundary: auth, загрузка файлов, десериализация, crypto, URL parsing, model loading и т.д.
- есть ли у проекта реальная способность быстро выпустить фикс
Плюс инструмент:
- проверяет pinned-версии по advisory-базам
- учитывает CISA KEV и EPSS
- AST-парсит ваш код и показывает, где зависимость реально импортируется
- отличает abandoned package от просто редко обновляемого
- умеет работать как hook для Claude Code и блокировать подозрительную зависимость до pip install
Интересный подход: не засыпать разработчика сотнями CVE, а приоритизировать именно те зависимости, где одновременно есть экспозиция + слабая поддержка.
Автор отдельно рекомендует использовать его вместе с pip-audit, а не вместо него.
https://github.com/binuka200/package-doctor
@Python_Community_ru
Он отвечает не только на вопрос «есть ли у пакета CVE?», а на более практичный:
если завтра в этой зависимости найдут уязвимость, вы реально под угрозой и есть ли вообще кому её исправлять?
Package Doctor оценивает сразу две вещи:
- находится ли библиотека на trust boundary: auth, загрузка файлов, десериализация, crypto, URL parsing, model loading и т.д.
- есть ли у проекта реальная способность быстро выпустить фикс
Плюс инструмент:
- проверяет pinned-версии по advisory-базам
- учитывает CISA KEV и EPSS
- AST-парсит ваш код и показывает, где зависимость реально импортируется
- отличает abandoned package от просто редко обновляемого
- умеет работать как hook для Claude Code и блокировать подозрительную зависимость до pip install
Интересный подход: не засыпать разработчика сотнями CVE, а приоритизировать именно те зависимости, где одновременно есть экспозиция + слабая поддержка.
Автор отдельно рекомендует использовать его вместе с pip-audit, а не вместо него.
https://github.com/binuka200/package-doctor
@Python_Community_ru
🔥 Qwen представила Qwen3.8-Omni-Flash - свою первую мультимодальную модель, изначально заточенную под агентные задачи.
Она одновременно работает с видео и аудио, умеет рассуждать по увиденному и услышанному, планировать действия и подключать инструменты. Среди сценариев — автоматический монтаж влогов, перевод коротких видео, создание пересказов фильмов и поиск нужных эпизодов в длинных записях.
По данным Qwen, на WildClawBench-MM и UniClawBench модель прибавила в среднем 19,5 пункта в агентных задачах и приблизилась к Gemini 3.8 Flash по работе с аудио и видео.
Контекст - 1 млн токенов. На OmniVideoBench активный поиск по длинному видео позволил сократить расход токенов на 51,8% по сравнению со статическим анализом.
Стоимость обработки видео при этом снизилась примерно на 89% относительно Qwen3.5-Omni-Plus.
Вместе с моделью Qwen открывает Qwen-MM-Plugins для мультимодальных инструментов. Qwen-Live Harness также будет опубликован отдельно.
https://qwen.ai/blog?id=qwen3.8-omni-flash
@Python_Community_ru
Она одновременно работает с видео и аудио, умеет рассуждать по увиденному и услышанному, планировать действия и подключать инструменты. Среди сценариев — автоматический монтаж влогов, перевод коротких видео, создание пересказов фильмов и поиск нужных эпизодов в длинных записях.
По данным Qwen, на WildClawBench-MM и UniClawBench модель прибавила в среднем 19,5 пункта в агентных задачах и приблизилась к Gemini 3.8 Flash по работе с аудио и видео.
Контекст - 1 млн токенов. На OmniVideoBench активный поиск по длинному видео позволил сократить расход токенов на 51,8% по сравнению со статическим анализом.
Стоимость обработки видео при этом снизилась примерно на 89% относительно Qwen3.5-Omni-Plus.
Вместе с моделью Qwen открывает Qwen-MM-Plugins для мультимодальных инструментов. Qwen-Live Harness также будет опубликован отдельно.
https://qwen.ai/blog?id=qwen3.8-omni-flash
@Python_Community_ru
🔥1
🐍 В CPython одно чтение `__dict__` может навсегда замедлить доступ к атрибутам конкретного объекта.
Начиная с Python 3.11 обычный obj.x часто вообще не делает lookup по словарю. После прогрева интерпретатор специализирует LOAD_ATTR, а значение читается почти напрямую из inline storage объекта.
Но достаточно выполнить:
`obj.__dict__`
или:
`vars(obj)`
а в некоторых случаях даже:
`copy.copy(obj)`
— и __dict__ материализуется. После этого объект теряет быстрый специализированный путь на оставшееся время жизни.
На CPython 3.14.6 в тесте на M3:
обычный объект → 33.0 ms
после чтения __dict__ → 50.6 ms
В free-threaded сборке разрыв ещё больше:
34.0 ms → 59.4 ms.
Интересная деталь: __slots__ сам по себе почти не ускоряет обычный attribute access. Его преимущество здесь в другом — у объекта нет __dict__, значит его невозможно случайно материализовать и сбить оптимизацию.
Очень неочевидная причина, почему vars() или copy.copy() внутри hot path могут неожиданно ударить по производительности.
https://deadlovelll.github.io/2026-09-05-reading-dict-deoptimizes-attribute-access/
@Python_Community_ru
Начиная с Python 3.11 обычный obj.x часто вообще не делает lookup по словарю. После прогрева интерпретатор специализирует LOAD_ATTR, а значение читается почти напрямую из inline storage объекта.
Но достаточно выполнить:
`obj.__dict__`
или:
`vars(obj)`
а в некоторых случаях даже:
`copy.copy(obj)`
— и __dict__ материализуется. После этого объект теряет быстрый специализированный путь на оставшееся время жизни.
На CPython 3.14.6 в тесте на M3:
обычный объект → 33.0 ms
после чтения __dict__ → 50.6 ms
В free-threaded сборке разрыв ещё больше:
34.0 ms → 59.4 ms.
Интересная деталь: __slots__ сам по себе почти не ускоряет обычный attribute access. Его преимущество здесь в другом — у объекта нет __dict__, значит его невозможно случайно материализовать и сбить оптимизацию.
Очень неочевидная причина, почему vars() или copy.copy() внутри hot path могут неожиданно ударить по производительности.
https://deadlovelll.github.io/2026-09-05-reading-dict-deoptimizes-attribute-access/
@Python_Community_ru
🐍 Ruff доволен, mypy молчит, тесты зелёные. А в коде четыре одинаковых функции
Автор статьи столкнулся с этим в проекте, который писал ИИ-агент. Вместо поиска готовых функций агент добавлял новые копии. Когда понадобилось изменить нормализацию данных, он уже не мог разобраться, какую из четырёх править.
Обычные проверки не покрывают всю структуру проекта:
* Ruff находит нарушения правил и умеет проверять сложность при соответствующей настройке.
* mypy проверяет типы.
* pytest проверяет сценарии, для которых написаны тесты.
При этом дублирование между файлами, неиспользуемые функции и нарушения архитектурных границ могут остаться незамеченными.
Автор предлагает добавить структурный анализ. Его инструмент pyscn ищет дубли, сложные функции, мёртвый код и нарушения правил зависимостей:
uvx pyscn analyze .
Что полезно забрать в свой проект:
* Блокировать в CI новые проблемы, а не сразу весь накопленный техдолг.
* Следить за изменением сложности, а не только за общей оценкой.
* Закрепить допустимые зависимости между модулями проверяемыми правилами.
* Дать агенту запускать анализатор до отправки кода на ревью.
Высокая сложность сама по себе ещё не повод переписывать функцию. Иногда длинная последовательность понятных проверок лучше искусственного дробления.
Статья — https://codescan.dev/blog/ruff-mypy-pytest-and-then-what
@Python_Community_ru
Автор статьи столкнулся с этим в проекте, который писал ИИ-агент. Вместо поиска готовых функций агент добавлял новые копии. Когда понадобилось изменить нормализацию данных, он уже не мог разобраться, какую из четырёх править.
Обычные проверки не покрывают всю структуру проекта:
* Ruff находит нарушения правил и умеет проверять сложность при соответствующей настройке.
* mypy проверяет типы.
* pytest проверяет сценарии, для которых написаны тесты.
При этом дублирование между файлами, неиспользуемые функции и нарушения архитектурных границ могут остаться незамеченными.
Автор предлагает добавить структурный анализ. Его инструмент pyscn ищет дубли, сложные функции, мёртвый код и нарушения правил зависимостей:
uvx pyscn analyze .
Что полезно забрать в свой проект:
* Блокировать в CI новые проблемы, а не сразу весь накопленный техдолг.
* Следить за изменением сложности, а не только за общей оценкой.
* Закрепить допустимые зависимости между модулями проверяемыми правилами.
* Дать агенту запускать анализатор до отправки кода на ревью.
Высокая сложность сама по себе ещё не повод переписывать функцию. Иногда длинная последовательность понятных проверок лучше искусственного дробления.
Статья — https://codescan.dev/blog/ruff-mypy-pytest-and-then-what
@Python_Community_ru
⚡ Qwen представила Audio 3.1 - единый стек для ASR, TTS и realtime-аудио.
Главное:
* ASR лучше распознаёт языки и диалекты, убирает повторы и слова-паразиты.
* ASR-Next разделяет спикеров, ставит таймкоды, распознаёт эмоции и окружающие звуки.
* TTS поддерживает перенос голоса между языками и управление стилем, скоростью и эмоцией.
* TTS-Next генерирует сразу голос + эффекты + фон через связку LM + diffusion.
* Realtime умеет одновременно слушать и говорить с естественными перебиваниями.
Плюс сильно снизили цены: TTS ~−70%, Realtime ~−85%, ASR до −95%.
- Qwen-Audio-3.1-ASR:
https://qwencloud.com/models/qwen-audio-3.1-asr-flash-filetrans
- Qwen-Audio-3.1-Realtime:
https://qwencloud.com/models/qwen-audio-3.1-realtime-plus
@Python_Community_ru
Главное:
* ASR лучше распознаёт языки и диалекты, убирает повторы и слова-паразиты.
* ASR-Next разделяет спикеров, ставит таймкоды, распознаёт эмоции и окружающие звуки.
* TTS поддерживает перенос голоса между языками и управление стилем, скоростью и эмоцией.
* TTS-Next генерирует сразу голос + эффекты + фон через связку LM + diffusion.
* Realtime умеет одновременно слушать и говорить с естественными перебиваниями.
Плюс сильно снизили цены: TTS ~−70%, Realtime ~−85%, ASR до −95%.
- Qwen-Audio-3.1-ASR:
https://qwencloud.com/models/qwen-audio-3.1-asr-flash-filetrans
- Qwen-Audio-3.1-Realtime:
https://qwencloud.com/models/qwen-audio-3.1-realtime-plus
@Python_Community_ru
🔥2
⚡️ OmniVoice - открытая модель озвучки с поддержкой более 600 языков.
Она умеет клонировать голос по 3–10 секундам записи и озвучивать новый текст этим голосом. Можно также задать характеристики голоса словами - например, тембр или акцент, либо позволить модели выбрать голос самой.
Для разработчиков есть Python API, CLI и локальное веб-демо. Авторы заявляют скорость генерации до 40× быстрее реального времени, но это показатель для отдельных условий запуска, а не гарантия для любого устройства.
Режим создания голоса по описанию обучали преимущественно на английском и китайском, поэтому на других языках результат может быть нестабильным.
Подойдёт для озвучки роликов, локализации и голосовых интерфейсов - особенно если нужен язык, который редко встречается в TTS-моделях.
GitHub: k2-fsa/OmniVoice: https://github.com/k2-fsa/OmniVoice
@Python_Community_ru
Она умеет клонировать голос по 3–10 секундам записи и озвучивать новый текст этим голосом. Можно также задать характеристики голоса словами - например, тембр или акцент, либо позволить модели выбрать голос самой.
Для разработчиков есть Python API, CLI и локальное веб-демо. Авторы заявляют скорость генерации до 40× быстрее реального времени, но это показатель для отдельных условий запуска, а не гарантия для любого устройства.
Режим создания голоса по описанию обучали преимущественно на английском и китайском, поэтому на других языках результат может быть нестабильным.
Подойдёт для озвучки роликов, локализации и голосовых интерфейсов - особенно если нужен язык, который редко встречается в TTS-моделях.
GitHub: k2-fsa/OmniVoice: https://github.com/k2-fsa/OmniVoice
@Python_Community_ru
🔥1