Python Community
11.6K subscribers
1.48K photos
121 videos
15 files
1.01K links
Python Community RU - СНГ сообщество Python-разработчиков

Чат канала: @python_community_chat

Сотрудничество: @cyberJohnny и @Sergey_bzd

РКН реестр:
https://knd.gov.ru/license?id=67847dd98e552d6b54a511ed&registryType=bloggersPermission
Download Telegram
‍🖥 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
‍🔥 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
‍🔥 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
🔥 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
🔥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
‍🐍 Ruff доволен, mypy молчит, тесты зелёные. А в коде четыре одинаковых функции

Автор статьи столкнулся с этим в проекте, который писал ИИ-агент. Вместо поиска готовых функций агент добавлял новые копии. Когда понадобилось изменить нормализацию данных, он уже не мог разобраться, какую из четырёх править.

Обычные проверки не покрывают всю структуру проекта:

* 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
🔥2
⚡️ OmniVoice - открытая модель озвучки с поддержкой более 600 языков.

Она умеет клонировать голос по 3–10 секундам записи и озвучивать новый текст этим голосом. Можно также задать характеристики голоса словами - например, тембр или акцент, либо позволить модели выбрать голос самой.

Для разработчиков есть Python API, CLI и локальное веб-демо. Авторы заявляют скорость генерации до 40× быстрее реального времени, но это показатель для отдельных условий запуска, а не гарантия для любого устройства.

Режим создания голоса по описанию обучали преимущественно на английском и китайском, поэтому на других языках результат может быть нестабильным.

Подойдёт для озвучки роликов, локализации и голосовых интерфейсов - особенно если нужен язык, который редко встречается в TTS-моделях.

GitHub: k2-fsa/OmniVoice: https://github.com/k2-fsa/OmniVoice

@Python_Community_ru
🔥1
Линтер для инструкций ИИ-агентов

LintLang проверяет AGENTS.md, CLAUDE.md, SKILL.md, описания инструментов и конфигурации агентов. Ищет расплывчатые инструкции, циклы без условия остановки и расхождения между описанием инструмента и его схемой.

Работает локально, без вызовов LLM. Его можно запустить перед коммитом или добавить в CI, чтобы новые ошибки в инструкциях попадали на проверку вместе с кодом.


uvx lintlang scan AGENTS.md


https://github.com/hermes-labs-ai/lintlang

@Python_Community_ru