ar
Feedback
Zen of Python

Zen of Python

الذهاب إلى القناة على Telegram

Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/xZOL

إظهار المزيد

📈 نظرة تحليلية على قناة تيليجرام Zen of Python

تُعد قناة Zen of Python (@zen_of_python) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 18 951 مشتركاً، محتلاً المرتبة 6 776 في فئة التكنولوجيات والتطبيقات والمرتبة 34 770 في منطقة روسيا.

📊 مؤشرات الجمهور والحراك

منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 18 951 مشتركاً.

بحسب آخر البيانات بتاريخ 26 أغسطس, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -168، وفي آخر 24 ساعة بمقدار -9، مع بقاء الوصول العام مرتفعاً.

  • حالة التحقق: غير موثّقة
  • معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 10.58‎%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 6.33‎% من ردود الفعل نسبةً إلى إجمالي المشتركين.
  • وصول المنشورات: يحصل كل منشور على متوسط 2 005 مشاهدة. وخلال اليوم الأول يجمع عادةً 1 200 مشاهدة.
  • التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 5.
  • الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل github, rust, pip, api, install.

📝 الوصف وسياسة المحتوى

يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/xZOL

بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 27 أغسطس, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.

18 951
المشتركون
-924 ساعات
-467 أيام
-16830 أيام
أرشيف المشاركات
Steering Council внезапно нажал на тормоз перед JIT-компилятором в CPython. 5 июня совет опубликовал заявление: чтобы JIT стал поддерживаемой, а не экспериментальной частью CPython, нужен полноценный Standards Track PEP, который сообщество обсудит, а совет официально примет или отклонит. История такая: JIT влили в main несколько лет назад как эксперимент, и единственный PEP про него, PEP 744, имеет статус Informational — то есть описывает дизайн, но ничего формально не закрепляет. Открытые вопросы из него (долгосрочные мейнтейнеры, security-ревью, поддержка отладчиков, гарантии рантайма) так и висят нерешёнными. Совет честно признаёт, что ответственность общая: сами не следили за процессом так строго, как заслуживает изменение такого масштаба. Условия жёсткие: 🔘до принятия PEP никакой новой функциональности JIT в main: ни фич, ни оптимизаций, ни перформанс-работы. Только багфиксы и security-фиксы; 🔘на подачу и принятие PEP даётся шесть месяцев. Не успеют — JIT удаляют из main, и разработка продолжается вне основного репозитория; 🔘PEP должен ответить на неудобные вопросы: план поддержки, совместимость с free-threading, профайлерами и отладчиками, измеримые цели по скорости и памяти, отношения со сторонними JIT вроде CinderX, Numba и PyTorch. Интересная мысль из заявления: вместо одной конкретной реализации PEP может описать JIT-инфраструктуру, на которой можно пробовать разные стратегии трассировки, не привязываясь к одной. Напомню контекст: буквально на прошлой неделе писал, что переработанный JIT в 3.15 даёт около 8-9% на Linux x86-64. И вот теперь вся эта работа на паузе до принятия PEP. Шесть месяцев на то, чтобы формализовать проект, в который вложены годы — следим. @zen_of_python

Polars запустил распределённый движок на Kubernetes. Раньше это жило только в их облаке на AWS, а теперь распределённый Polars можно поднять в своей инфраструктуре: AKS, GKE, EKS, голое железо, даже SLURM. Код не меняется, тот же самый Polars API, ты просто дописываешь .remote(ctx) к своему LazyFrame, и запрос уходит считаться на кластер. Хоть петабайтный join, запущенный с ноутбука. Распределённые движки обычно ощущаются как боль: куча микросервисов, тяжёлый JVM-рантайм, кластер поднимается минуты, а то и десятки минут. У Polars один бинарник и helm-чарт, кластер стартует за секунды. То есть реально можно поднимать отдельный кластер под каждый ETL-джоб и гасить после. Плюс завезли две приятные штуки: 🔘Профайлинг запросов. Раньше движок был чёрным ящиком: пока запрос не закончился, ты не знал, что он делает. Теперь есть фронтенд и API, которые в реальном времени показывают, какая операция выполняется, сколько строк прошло через каждый узел и сколько данных шаффлится между воркерами. Причём работает и для одного узла, редкий шанс заглянуть внутрь движка на рантайме. 🔘 Data lineage через OpenLineage. Движок умеет слать события в любой коллектор (например, Marquez), так что видно, как и когда таблица создавалась и обновлялась. @zen_of_python

Мейнтейнер проекта рассказывает, каково это, когда в твою библиотеку прилетает громкая CVE и следом волна прессы. Речь про Starlette — это ASGI-фреймворк, на котором стоят FastAPI, vLLM, LiteLLM, куча MCP-серверов. CVE-2026-48710, окрестили «BadHost». Суть короткая. Роутинг внутри Starlette ходит по сырому HTTP-пути. А вот request.url он пересобирает строкой http://{host}{path}, где host берётся из заголовка Host. А Host контролирует клиент. И если приложение в middleware проверяет доступ так:
if request.url.path.startswith("/admin"):
    return PlainTextResponse("Forbidden", status_code=403)
то достаточно дёрнуть /admin/potato с заголовком Host: example.com/? — роутер всё равно отдаст endpoint /admin/potato (он-то смотрит на сырой путь), а вот request.url станет http://example.com/?/admin/potato, и request.url.path схлопнется в просто /. Проверка не срабатывает, секрет утекает. Что говорит сам мейнтейнер, и это самое интересное: 🔘баг живёт не во фреймворке самом по себе, а в паттерне приложения. Авторизацию вообще нельзя строить на пути, хосте или query — её ломают и трейлинг-слеши, и регистр, и percent-encoding. Host тут просто ещё один способ; 🔘если нужен реальный путь, бери request.scope["path"] — его никто из Host не пересобирает; 🔘чинится апгрейдом на Starlette 1.0.1, там Host наконец валидируется. Но человеческая часть зашла даже сильнее технической. Исследователи сначала выкатили срок раскрытия в месяц и предложили созвон «через 2 или 5 дней», как будто у опенсорсника есть дежурная security-команда, а не вечера после основной работы. Под конец и вовсе предложили опубликовать advisory до того, как выйдет патч. Мейнтейнер прямо называет это ужасной практикой: открытое описание дыры без фикса оставляет всех уязвимыми, зато атакующие получают ровно ту же инструкцию. Отдельно его задело, что под уязвимость подняли брендированный лендинг badhost.org с логотипом, именем и интернет-сканером. Маркетинг уязвимости: пока базы CVE не разъехались и Dependabot не прокликал алерты, человек узнаёт о дыре в своём проде из заголовка новости. @zen_of_python

Осенью нас ждёт Python 3.15, набор фич для него уже заморожен в бете. Заглянул, что там приедет, и нашёл пару вещей, которые поменяют привычки. Самое заметное: явные ленивые импорты (PEP 810). Появляется ключевое слово lazy. Модуль пишется в импорте как обычно, но реально подгружается только при первом обращении.
lazy import json
lazy from pathlib import Path

print("старт")  # json и pathlib ещё не загружены
data = json.loads('{"ok": true}')  # здесь json наконец подгружается
Раньше ради быстрого старта тяжёлые импорты прятали внутрь функций. Теперь их можно держать наверху файла, как и положено, без платы за импорт при запуске. Есть и глобальные переключатели: флаг -X lazy_imports и переменная окружения, если хочется включить лень разом. И это не воскрешение отклонённого когда-то PEP 690, механизм тут другой и явный. Второе приятное: встроенный frozendict (PEP 814). Неизменяемый и хешируемый словарь прямо в языке, без импортов. То же, чем frozenset является для set.
config = frozendict({"debug": True, "retries": 3})
# поменять значение уже нельзя, будет TypeError
Ещё одно: PEP 661 даёт штатный способ делать sentinel-значения вместо самодельных MISSING = object(). Теперь это нормальный механизм с человеческим repr и поддержкой в аннотациях типов. Под капотом тоже движение: переработанный JIT даёт около 8-9% на Linux x86-64, интерпретатор с tail-call приехал и на Windows (там плюс 15-20%), появился стабильный ABI для free-threaded сборок. Финальный 3.15 ждём осенью, но облик версии уже ясен. Лично я больше всего жду lazy import: сколько раз приходилось прятать импорты в функции ради быстрого CLI. А вы ждёте 3.15 или пока сидите на чём-то постарше? @zen_of_python

Попалось обсуждение про опенсорс. Мейнтейнер описывает ситуацию: кто-то форкает репозиторий, ссылается в коммитах на его issue — это приятно, человек заинтересовался. А открываешь ветку, и там чистый ИИ-слоп. Файлы свалены в корень вместо src, тесты с print вместо pytest (хотя в CONTRIBUTING всё расписано), импорты вида from mylib import Foo, Bar, которых в коде и документации никогда не было. Сверху сабклассы от этих галлюцинированных типов, разобрать невозможно. Отдельная деталь: у автора такого PR обычно куча форков других репозиториев, и везде он охотится за меткой good first issue. Похоже на сбор очков на GitHub, а не на желание реально закрыть задачу. Отсюда вопрос: стоит ли тратить силы на честное ревью и как закрыть PR, не отпугнув нормальных будущих контрибьюторов. Что советуют бывалые мейнтейнеры: 🔘Просто закрыть и заблокировать. Самый частый ответ. К остальным это не враждебно: либо человек игнорит правила проекта, либо приносит код без ценности. И то и другое повод закрыть. 🔘 Завести метку вроде «doesn't follow contribution rules» и объяснить её в гайдлайнах. Тогда на закрытие уходит три клика, а если вернётся живой человек и поправит PR, это уже сигнал, что стоит посмотреть. 🔘 Поднять минимальный порог через CI. ruff, mypy или basedpyright, pytest с требованием покрытия, проверка докстрингов. Линтеры отсекают мусор автоматически, ещё до человеческого ревью. 🔘 Не закрывать вслепую каждый случай. Люди с неродным английским всё чаще прогоняют описание и доки через ИИ. Если контрибьюция небольшая, есть смысл быстро глянуть сам код. Был и спор про AGENTS.md. Одни считают, что инструкции для агента поднимают качество PR. Другие, что само наличие файла как бы говорит «здесь рады ИИ-коду» и только притягивает слоп. А вы как с этим справляетесь, если ведёте свои репозитории? @zen_of_python

PyPy 7.3.23 стал доступен для скачивания, а PyPy описала релиз как bugfix-обновление. Напомню, PyPy — альтернативный интерпретатор Python с JIT. Его обычно пробуют там, где много долгоживущего CPU-bound кода на чистом Python и хочется ускорения без переписывания на C. Что важно в 7.3.23: 🔘убрали ложные warning'и про неиспользованные корутины при доступе к cr_frame; 🔘починили множественное наследование для смешанных Python/C-extension типов, включая сценарии вокруг pybind11 и cpyext; 🔘PyPy3.11 теперь идёт со стандартной библиотекой CPython 3.11.15; 🔘дизассемблер стал ближе к CPython: интерпретатор перешёл на exception tables вместо отдельных opcodes. На скорость это пока не влияет. Если вы уже используете PyPy, то обновление стоит поставить, API совместим с линейкой 7.3. Если только думаете попробовать — начните с прогона тестов на PyPy3.11 и проверки зависимостей. PyPy лучше всего раскрывается на чистом Python-коде. В проектах, где основная нагрузка уходит в NumPy, pandas, torch или другие C-расширения, прирост может быть совсем другим. @zen_of_python

Наткнулся тут на обсуждение, которое мне тоже периодически приходит в голову: стоит ли использовать uv, если OpenAI покупает Astral. Напомню, Astral это те ребята, которые сделали uv, ruff и ty, которые мы так любим. Короткий вывод: для новых Python-проектов uv всё ещё выглядит самым практичным выбором. Почему разработчики так за него держатся: — uv закрывает сразу несколько бытовых задач: ставит Python-версии, создаёт venv, ставит зависимости, фиксирует lockfile, запускает команды в окружении и заменяет часть сценариев pip, pip-tools, pipx, poetry и pyenv. Типичный flow становится проще:
uv init
uv add fastapi
uv run app.py
uv sync --frozen
Риск с OpenAI тут скорее управленческий, а не технический. Важно смотреть на лицензию, телеметрию, темп релизов и то, останется ли core-разработка открытой. На практике же зависимости живут в стандартном pyproject.toml, а Python уже движется к стандартному lockfile через PEP 751 / pylock.toml, так что миграция с uv должна быть проще, чем с более закрытых форматов. То есть вопрос скорее не про то, использовать ли uv, а о том как использовать его без религии и без лишней привязки к одному владельцу. А вы как думаете? Продолжаем жить на uv, всё норм?

В Long Beach на PyCon US 2026 14 мая прошёл Typing Summit: четыре часа, восемь докладов, один трек. Несколько моментов с самм
В Long Beach на PyCon US 2026 14 мая прошёл Typing Summit: четыре часа, восемь докладов, один трек. Несколько моментов с саммита. Гвидо ван Россум открыл саммит докладом про то, что правило PEP 484 «никакого нового синтаксиса для типов» де-факто давно нарушено: TypedDict, ParamSpec, оператор type и прочее. Его аргумент: пора признать это формально и выбирать приоритеты по реальной боли пользователей. Опирался на Python Typing Survey 2025. Дуглас Креагер из Astral (его слайд гласил «an OpenAI joint») показал девятистрочный пример, на котором все продакшен-чекеры (mypy, pyright, pyre, Pyrefly, ty) дают неверный ответ:
def choose[A](a1: A, a2: A) -> A:
    return random.choice([a1, a2])

def partial[X, Y, Z](fn: Callable[[X, Y], Z], x: X) -> Callable[[Y], Z]: ...

p = partial(choose, None)
p(2)         # все говорят: ошибка, 2 не None
p("hello")   # то же самое
Прямой вызов choose(None, 2) работает корректно: A решается в None | Literal[2]. После применения partial система ломается. Креагер предлагает другую стратегию: тянуть весь набор констрейнтов как отложенный обобщённый тип, без преждевременной подстановки. ty переезжает на этот подход, внутри используется тернарная структура BDD (двоичные решающие диаграммы с третьим «неопределённым» ребром). Коннер Нильсен из команды Pyrefly доложил результаты экспериментов с ИИ-агентами. Если код хорошо типизирован и type checker подключён к агенту через обёртку с циклом «думай, действуй, наблюдай»: — Доля успешных решений на внутренних бенчмарках команды поднялась с 79,6 до 83,9 процента. — На 21 процент меньше шагов до решения. — На 14 процентов быстрее по полному времени работы. На слабо типизированном коде из SWE-bench Verified эффекта почти нет. Type checker ловит ошибки в соседних с задачей файлах, и агент уходит чинить их вместо основной задачи. Наблюдение по моделям: Claude Sonnet 4.5 чинит каждую ошибку, GPT-5 codex игнорирует типы, пока обёртка насильно их не подсунет. Ещё были доклады про intersection types (Jelle Zijlstra), PEP 827 от Vercel про conditional и mapped types по образцу TypeScript, tensor-shape типы в Pyrefly, и формализация подмножества Python в Lean 4. Полный обзор здесь: https://bernat.tech/posts/pycon-us-2026-typing-summit-recap/ @zen_of_python (теперь в VK и Max)

vLLM-инференс в облаке без собственной инфраструктуры Selectel запустил Foundation Models Catalog — управляемый сервис, где в
vLLM-инференс в облаке без собственной инфраструктуры Selectel запустил Foundation Models Catalog — управляемый сервис, где вы выбираете модель из каталога, а провайдер берёт на себя GPU, масштабирование и наблюдаемость. Движок под капотом: vLLM, питоновская библиотека поверх PyTorch, которую сейчас называют производственным стандартом для инференса. Что это даёт на практике: вместо того чтобы поднимать свой vLLM-сервер, арендовать GPU и настраивать мониторинг, вы обращаетесь к уже готовому OpenAI-совместимому эндпоинту через openai-клиент или requests. Код тот же, что при локальном запуске. Автомасштабирование, логи и метрики включены. В каталоге сейчас IBM Granite, Qwen, DeepSeek, Phi, Mistral; скоро Gemma и Whisper. Оплата пока за вычислительные ресурсы, следующим шагом станет тарификация по токенам. Подробнее на Tproger.

В Python 3.14 в стандартную библиотеку добавили модуль concurrent.interpreters: публичный API для запуска нескольких полноценных интерпретаторов внутри одного процесса. Это финал длинной истории. PEP 554 в 2017 году описал идею, PEP 684 в 2023 дал каждому интерпретатору собственный GIL, и PEP 734, принятый в июне 2025, превратил всё это в стандартный Python-модуль. До 3.14 функционал был доступен только через C API. API ровно такой, какой ожидаешь:
import concurrent.interpreters as interpreters
interp = interpreters.create()
interp.exec('print("Hello from subinterp")')
interp.close()
Каждый интерпретатор изолирован: своя память, свой GIL, свой импорт-кеш. Простые типы передаются через специальный канал без копирования, сложные идут через сериализацию вроде pickle. Что это даёт: — Настоящая многозадачность в одном процессе без multiprocessing. Каждый интерпретатор едет на своём GIL и параллельно работает на отдельном ядре. — Совместимость с asyncio. CPU-bound подзадачи можно гонять в субинтерпретаторах, а сетевой ввод-вывод оставить в основном цикле событий. — Один процесс. Общие файловые дескрипторы, единое управление, без накладных расходов на fork и spawn. У подхода одно главное ограничение: C-расширения. Стабильность под per-interpreter GIL не гарантирована, и многим библиотекам ещё предстоит дозревать. Чистый Python и библиотеки с поддержкой PEP 684 работают, остальные могут падать. PEP 734 и free-threading решают одну задачу разными способами. Free-threading убирает GIL вообще: больше совместимости, меньше изоляции. Sub-interpreters сохраняют GIL на интерпретатор: меньше совместимости, больше изоляции. Похоже, в долгую Python поддержит оба пути. Свежий разбор с примерами и архитектурой: https://alexeev-dev.bearblog.dev/running-multiple-interpreters-in-python-code-incredible-speed/ @zen_of_python (теперь в VK и Max)

Pyrefly — быстрый type checker и language server для Python — добрался до релиза версии 1.0 С бета-версии в ноябре 2025 года прошло больше 60 выпусков. Diagnostics после сохранения ускорились в 2–125 раз, полная проверка крупных проектов — на 20–36%, памяти стало меньше на 40–60%. Соответствие спецификации Python typing выросло с 70% до 90%. Добавили пресеты конфигурации: от отключённых проверок до strict. Для проектов без конфига — автоматический lightweight basic preset, для миграции с mypy и pyright — автоматическая конвертация настроек. Улучшили LSP: Safe Delete, точная навигация, hover cards с богатой информацией. Полная поддержка Jupyter notebooks на уровне обычных .py файлов. Расширили поддержку Django, Pydantic, Pytest. Два новых инструмента для внедрения в существующие кодовые базы: coverage report и baseline files (снимок текущих ошибок, чтобы показывать только новые). Не скажу, что я план фанат, мне больше по душе ty, но они пока что на версии 0.0.35 т.е. сами дают понять, что делают крутую штуку, но в прод рановато. @zen_of_python

Выбор библиотеки для логирования в Python, автор сделал свежий обзор, кратко перескажу. Стандартный logging остаётся базой —
Выбор библиотеки для логирования в Python, автор сделал свежий обзор, кратко перескажу. Стандартный logging остаётся базой — им пользуются все фреймворки и библиотеки, и через него проходит интеграция с OpenTelemetry. Но конфигурация через dictConfig не самая удобная, а контекст на уровне запроса приходится прокидывать вручную через contextvars. structlog — главный кандидат на замену. Процессорный pipeline из коробки даёт redaction, enrichment и sampling. contextvars работают через asyncio без дополнительного кода. При этом можно оставить stdlib в качестве backend — весь хэндлер-экосистема сохраняется. По бенчмаркам structlog примерно в 2 раза быстрее stdlib и Loguru: 242k ops/s против 139k и 147k соответственно. Loguru — минимум setup, но ценой глобального логгера без иерархии компонентов. Нет нативной OpenTelemetry-интеграции, только через InterceptHandler в обход. Logbook — legacy от Armin Ronacher. Нет structured JSON из коробки, нет OTel. Для новых проектов не рекомендуется. picologging — drop-in replacement на C от Microsoft, в 4–17 раз быстрее, но проект не поддерживается с 2023 года, нет поддержки Python 3.13+. Не для продакшена. Главный вывод статьи: выбор библиотеки менее важен, чем практики. Structured output, консистентный контекст, правильные уровни и чистота полей — вот что делает логи полезными в production. Если stdlib с python-json-logger работает, не мигрируйте ради миграции. Если boilerplate мешает — берите structlog.

Откуда в России взялись программисты — история, которую вам не рассказывали Если вы думаете, что российский IT начался с нуле
Откуда в России взялись программисты — история, которую вам не рассказывали Если вы думаете, что российский IT начался с нулевых — нет. Всё началось на несколько десятилетий раньше, в закрытых НИИ и институтских подвалах. В конце 1940-х Советскому Союзу понадобились вычислительные машины — моделировать ядерные реакции и считать ракетные траектории вручную было нереально. Учёный Сергей Лебедев построил первую советскую ЭВМ, а потом серию БЭСМ. Пиковая модель, БЭСМ-6, выпускалась почти 20 лет — именно на ней учили программированию в лучших технических вузах. Культура, сложившаяся в условиях жёстких ограничений, никуда не исчезла. Она и стала фундаментом для Яндекса, Контура и всего остального российского бигтеха. Читайте все 7 фактов на Tproger @tproger Читайте также в VK, Max и Дзен

«Хочу в IT, но не знаю куда» — это нормально. Вот тест, который помогает разобраться Тестировщик, системный разработчик, сете
«Хочу в IT, но не знаю куда» — это нормально. Вот тест, который помогает разобраться Тестировщик, системный разработчик, сетевой администратор, инженер по железу — когда только входишь в профессию, все звучит одинаково непонятно. И выбрать направление наугад — не лучший план. YADRO — одна из самых быстрорастущих технологических компаний страны — сделали квиз на основе реальных задач своих стажировок. Семь вопросов без правильных и неправильных ответов: просто выбираете то, что откликается. На выходе — конкретное направление с описанием задач и честной вилкой зарплат после стажировки. Полезно даже не для того, чтобы попасть именно в YADRO — а чтобы понять, в какую сторону вообще смотреть. Пройти квиз: https://tprg.ru/9Dic

Как писать Python-библиотеки в 2026 году — гайд от разработчика, который недавно прошёл этот путь в продакшене. Основной тезис: экосистема Python наконец-то консолидировалась. Вместо десятка разрозненных инструментов теперь можно обойтись экосистемой Astral. Стек: — uv init --lib my-package — проект за одну команду, src-структура, pyproject.toml, .python-version сразу на месте — ruff — линтинг и форматирование в одном флаконе — mypy или ty / pyrefly — типизация (автор рекомендует попробовать все три, uv позволяет быстро переключаться) — pytest + pytest-cov — тесты с coverage — uv run --python 3.12 — тестирование на разных версиях Python без tox и nox — pre-commit + CI — контроль качества до момента коммита и при релизе Ключевой инсайт: uv настолько хорош, что для внутренних библиотек даже не обязательна публикация в PyPI. Можно ставить прямо из git-репозитория: uv add /path/to/my-package, и uv сам разберётся с билдом, кэшем и линковкой. В конце автор разбирает реальные стеки openai-python и polars — оба уже на ruff, но openai ещё на старом билд-инструменте (hatchling через rye), а polars обходит стандартный подход из-за Rust-ядра. Полный гайд: https://stephenlf.dev/blog/python-library-in-2026/

Исследуйте инструменты для разработчиков в системе SourceCraft в новом квесте с космическими призами! https://tprg.ru/nDdZ @z
Исследуйте инструменты для разработчиков в системе SourceCraft в новом квесте с космическими призами! https://tprg.ru/nDdZ @zen_of_python

В Python-сообществе обсуждают свежий PEP 831 под названием «Frame Pointers Everywhere». Авторы предлагают начиная с Python 3.
В Python-сообществе обсуждают свежий PEP 831 под названием «Frame Pointers Everywhere». Авторы предлагают начиная с Python 3.15 по умолчанию собирать CPython и все Си/Rust-расширения с включёнными указателями фреймов (frame pointers). Зачем это нужно? Исторически компиляторы (GCC/Clang) для оптимизации вырезают указатели фреймов, освобождая один регистр процессора для вычислений. Проблема в том, что без этих указателей внешние профайлеры (perf, py-spy) и eBPF-тулы не могут нормально размотать стек вызовов. Вы пытаетесь понять, почему тормозит ваш бэкенд, открываете flame-граф, а там вместо нормального трейса — обрывки сишных функций и сломанный стек. PEP 831 предлагает добавлять флаги --fno-omit-frame-pointer --mno-omit-leaf-frame-pointer при сборке как самого интерпретатора, так и всех сторонних пакетов, которые компилируются через sysconfig. Главные тезисы предложения:Системная наблюдаемость из коробки. Любые профилировщики смогут строить идеальные flame-графы для Python-процессов без костылей. — Нужна поддержка всей экосистемы. Цепочка фреймов работает только если все звенья (CPython, ваши C-экстеншены, библиотеки на Rust) собраны с флагами. Одна библиотека без указателей, и трейс ломается для всего процесса. — Производительность почти не страдает. Авторы замерили падение производительности: в среднем оно составляет менее 2%. А на задачах, сильно нагружающих eval-loop, код парадоксальным образом работает даже на 1–2% быстрее из-за лучшего распределения инструкций в кэше процессора. — Уже протестировано в бою. Все бинарники python-build-standalone (которые под капотом использует тот же uv) уже давно собираются с этими флагами. То есть половина современного питона уже работает с frame pointers, PEP просто хочет сделать это официальным стандартом. Для тех, кому нужен каждый процент перформанса (например, в жёстком числовом дробилове), оставят флаг --without-frame-pointers при сборке интерпретатора. На Windows изменения никак не повлияют, там механизм размотки стека работает иначе и проблем с профайлингом нет. Метрики по производительности на скрине. @zen_of_python (теперь в VK и Max)

Устали от уймы API-ключей и танцев с бубном вокруг OpenAI, Claude и Gemini? Снять эту головную боль может один API-роутер. Ра
Устали от уймы API-ключей и танцев с бубном вокруг OpenAI, Claude и Gemini? Снять эту головную боль может один API-роутер. Разбираемся на Tproger, почему три разных API могут тормозить ваш проект и как подключить GPT-5.4, Claude Sonnet 4.6 и Gemini 3.1 Pro через единую точку входа без переписывания кода. Кратко о содержании: — Что умеет хороший роутер: fallback, балансировка, кеш, единый биллинг. — Пошаговый гайд подключения через одни API на Python и Node.js. — Реальный кейс: мультимодельный бот с авто-переключением за 30 минут. — Подводные камни: контекстные окна, latency, rate limits (и как их обойти). Читать материал: https://tprg.ru/YWhU