ch
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

显示更多

📈 Telegram 频道 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
帖子存档
django-scroll-to-top: кнопка «наверх», которая не ломается в проде Кнопка «наверх» кажется мелочью, пока в проде не всплывают
django-scroll-to-top: кнопка «наверх», которая не ломается в проде Кнопка «наверх» кажется мелочью, пока в проде не всплывают cookie-баннер, чат поддержки, нижняя мобильная навигация и строгий CSP. Автор собрал типовые условия в Django-пакет django-scroll-to-top: один template-тег, Django Admin, настройка цвета и положения через админку без правки шаблонов. Без jQuery, CDN и обязательной сборки. Если JavaScript выключён, остаётся обычная ссылка в начало страницы. Если в ваших Django-проектах кнопку надоело таскать между шаблонами, я бы заглянул в разбор на Tproger.

uv 0.11.26 — резолвер зависимостей ускорили сразу с четырёх сторон uv — быстрый пакетный менеджер и резолвер зависимостей для Python на Rust, замена pip и pip-tools в одном бинарнике. Версия 0.11.26 вышла 30 июня и целиком посвящена скорости резолвинга. Что ускорили: 🔘 зависимости в PubGrub теперь передаются как ID вместо полных структур, это снижает накладные расходы на каждой итерации резолвера; 🔘 убрали лишние аллокации в ForkMap::contains, структуре, которая проверяет пересечения версий между форками резолвера; 🔘 резолвер стал переиспользовать уже проделанную работу между итерациями PubGrub вместо пересчёта с нуля; 🔘 ускорили выбор кандидата версии для непересекающихся диапазонов зависимостей. Заодно поправили мелочь: uv теперь предупреждает, если build cache случайно оказался внутри директории с исходниками проекта. Резолвер зависимостей редко попадает в заголовки, но именно на нём держится ощущение «uv install мгновенный». Вы уже увидели разницу в скорости на своих проектах, или для небольших requirements.txt она и так была незаметна? @zen_of_python

Вышла CPython 3.15.0b3 — предпоследняя бета перед заморозкой 23 июня вышла третья из четырёх бета-версий Python 3.15: около 195 правок от 86 контрибьюторов со времён второй беты. Набор фич уже заморожен, дальше только багфиксы и шлифовка. Release candidate назначен на 4 августа, финальный релиз на 1 октября, и команда просит прогнать свой код на бете, чтобы поймать регрессии и поломки ABI заранее. Что приедет в серии 3.15 по сравнению с 3.14: 🔘PEP 686: UTF-8 становится кодировкой по умолчанию, открытие файлов без явного encoding больше не зависит от локали системы; 🔘PEP 810: явные ленивые импорты, модуль грузится при первом обращении, а не на старте программы, это срезает время запуска тяжёлых утилит; 🔘PEP 814: встроенный тип frozendict, неизменяемый словарь без сторонних библиотек; 🔘PEP 661: встроенный sentinel для значений-маркеров вместо самодельных объектов-заглушек; 🔘PEP 798: распаковка через * и ** прямо внутри list- и dict-comprehension; 🔘PEP 799: отдельный пакет для профилирования и Tachyon, высокочастотный статистический сэмплер. @zen_of_python

Где держать Telegram-бота или API, чтобы они не падали под нагрузкой и не съедали бюджет? Tproger собрал подборку из шести VPS-провайдеров под этот сценарий: от тарифов за пару сотен рублей в месяц до конфигураций с DDR5 и портом 10 Гбит/с. У каждого свой акцент — где-то посуточная оплата и запуск за минуту, где-то API для CI/CD, бэкапы и приватные сети, где-то зарубежные локации. Внутри по каждому провайдеру: реальные конфигурации, цены, на какой нагрузке тестировали и под какой сценарий брать. https://tproger.ru/articles/gde-razvernut-bota-ili-api---podborka-vps--kotorye-ne-tormozyat

Pathway — Python-фреймворк для потоковой обработки данных на Rust-движке Pathway даёт писать на Python пайплайны реального времени: чтение из источника, преобразования, запись в приёмник, а тяжёлая часть считается Rust-движком. Тот же код работает и на пакетных данных, и на бесконечном потоке. Релиз v0.31.1 вышел 12 июня, на GitHub больше 62 тысяч звёзд. Этот релиз почти целиком про новые коннекторы к базам: 🔘pw.io.elasticsearch.read читает индекс Elasticsearch: своего механизма отслеживания изменений у него нет, поэтому коннектор опрашивает и сверяет пересечение соседних запросов, чтобы ни одна строка не потерялась и не пришла дважды; 🔘pw.io.clickhouse.write пишет в ClickHouse по нативному протоколу, в двух режимах: поток изменений с колонками time и diff либо снапшот текущего состояния в ReplacingMergeTree; 🔘pw.io.mysql.read делает полноценный захват изменений через бинлог MySQL: сначала снимок таблицы, потом непрерывная доставка вставок, обновлений и удалений; 🔘расширили чтение Iceberg, теперь декодируются все примитивные типы, включая date, time, uuid, fixed и decimal; 🔘у коннекторов Postgres добавили набор проверок на старте, чтобы кривая конфигурация падала понятной ошибкой ещё до молчаливой потери строк. Пригодится дата-инженерам, которые строят аналитику и ETL реального времени и устали склеивать поток из десятка разных коннекторов вручную. https://github.com/pathwaycom/pathway Язык: Python и Rust. Лицензия: BSL-1.1. @prog_tools

Отправка почты из Python: stdlib, локальный SMTP и сторонние библиотеки В стандартной библиотеке Python для работы с почтой е
Отправка почты из Python: stdlib, локальный SMTP и сторонние библиотеки В стандартной библиотеке Python для работы с почтой есть пакет email и модуль для SMTP-соединений: формируете сообщение, добавляете вложения и адресатов, подключаетесь к серверу и отправляете. Для отладки удобно поднять локальный SMTP-сервер — письма не уйдут в интернет, но вы увидите, как они собираются. Явное лучше неявного, но ручная сборка писем со временем утомляет. Статья разбирает сторонние инструменты вроде Yagmail и transactional email-сервисов, чтобы вы могли выбрать между «всё под контролем» и готовым решением. Кому полезно: тем, кто отправляет уведомления, рассылки или отчёты из Python и хочет сравнить подходы.

Repost from IT Юмор
photo content

time.sleep() — не везде правильный способ подождать В синхронном скрипте time.sleep(2.5) идиоматичен: пауза в текущем потоке,
time.sleep() — не везде правильный способ подождать В синхронном скрипте time.sleep(2.5) идиоматичен: пауза в текущем потоке, никаких сюрпризов. Но в отдельном потоке ту же паузу не прервать по сигналу: лучше threading.Event().wait(), который просыпается по event.set(). В асинхронном коде time.sleep() заморозит весь event loop, потому что корутина не уступает управление. Правильный инструмент: await asyncio.sleep(), он приостанавливает только текущую задачу. В гайде ещё про декоратор retry, rate limit и паузы в GUI через root.after().

⚡️ AI-инструменты можно любить и ненавидеть, но работать без них в IT уже практически невозможно! Коллеги из AvitoTech 11 июл
⚡️ AI-инструменты можно любить и ненавидеть, но работать без них в IT уже практически невозможно! Коллеги из AvitoTech 11 июля зовут в их офис на Лесной на AI Hardcore Day. Приглашают тех, кто каждый день сталкивается с AI в работе и даже пишет своих AI-агентов. Обещают доклады и нетворкинг-сессию на террасе после — и всё это без записи. ✔️ Среди тем: — Spec-Driven Development: теория, инструменты, практика; — Разработка и тестирование MCP для внутренних агентных систем аналитики; — Выпрямляем руки агентов: как сделать MCP удобными и действительно полезными; — Атаки на GenAI-агентов: OWASP на практике. ➡️ Регистрация тут! Это #партнёрский пост

Виктор Стиннер, один из ключевых разработчиков CPython, разобрал в блоге, как устроен PyMutex, замок размером в один байт, на котором держится free-threaded Python. Зачем такой маленький? В режиме без GIL блокировка нужна на каждый объект отдельно: свой замок у каждого dict, list, set. Старый замок через py_recursivelock_t занимает 72 байта. Для сравнения, пустой список в Python 3.13 весит 56 байт, пустой словарь 64. Вешать по 72 байта на каждый объект невозможно. PyMutex решает это: один байт, из которого реально используются два бита под состояния (свободен, занят, занят с ожидающими потоками). Что показали замеры. Дизайн взят из WebKit, у их движка есть WTF::Lock, а под капотом лежит _PyParkingLot, кроссплатформенный аналог futex. На захвате и освобождении без конкуренции: 🔘Linux x86-64: PyMutex 11 нс против 44 нс у старого замка, в 4 раза быстрее; 🔘macOS arm64: 13 нс против 18 нс, в 1,4 раза; 🔘Windows x86-64: 13 нс против 38 нс, в 2,9 раза. Оговорка для авторов C-расширений: напрямую PyMutex использовать не стоит, легко словить взаимоблокировку. Для защиты доступа к объектам есть critical section API, Py_BEGIN_CRITICAL_SECTION(obj). @zen_of_python

На python.org можно было войти как админ с любым API-ключом Если в API python.org подсунуть имя администратора и произвольный
На python.org можно было войти как админ с любым API-ключом Если в API python.org подсунуть имя администратора и произвольный ключ, система пропускала запрос с правами администратора. Никакого перебора, никакой магии — просто имя пользователя и левый ключ. При этом атакующий не мог переписать сами файлы, но мог поменять URL для скачивания каждого релиза и ссылки на проверочные материалы Sigstore и PGP. Python Insider пишет, что баг пролежал в коде с 2014 года. Корпоративный перевод: «мы не трогаем бинари, мы только подменяем, куда вы их качаете». Команда безопасности Python получила отчёт 23 февраля и закрыла уязвимость менее чем за 48 часов. Артефакты проверили по подписям, следов вмешательства не нашли. Сайт уже пропатчен.

FastAPI выкатил два релиза подряд, 0.137.0 и 0.138.0, и оба меняют привычные вещи. Самое заметное снаружи появилось в 0.138.0: метод app.frontend(). Теперь собранный фронтенд раздаётся прямо из FastAPI, без отдельного nginx или статик-сервера:
app.frontend("/", directory="dist")
Кладёте билд SPA в dist, одна строка, и приложение само отдаёт его на корне. Есть и router.frontend() для поддерева. Под капотом в 0.137.0 переписали то, как роутеры включаются друг в друга: 🔘раньше include_router() клонировал каждый путь в один плоский список, и в итоге на всё приложение оставался один роутер; 🔘теперь исходные объекты APIRouter и APIRoute сохраняются, а router.routes стал деревом промежуточных объектов; 🔘из-за этого маршруты можно добавлять в подроутер уже после include_router(), изменения подхватятся, потому что роуты не копируются; 🔘в части случаев это ещё и экономит память. Здесь же спрятан ломающий момент: если ваш код ходил по router.routes как по плоскому списку APIRoute, он сломается, теперь это дерево. Для таких сценариев в 0.137.2 добавили iter_route_contexts(). @zen_of_python

Появился PEP 835, который предлагает сократить запись Annotated. Если пишете на Pydantic, FastAPI, Typer или SQLModel, вы видели это каждый день:
id: Annotated[int, Field(gt=0)]
name: Annotated[str, Field(min_length=3)]
PEP предлагает оператор @ для метаданных типа:
id: int @ Field(gt=0)
name: str @ Field(min_length=3)
Та же Annotated, просто запись короче. Детали из предложения: 🔘@ связывает сильнее, чем |: запись int | str @ Meta читается как int | Annotated[str, Meta], а для объединения с метаданными нужны скобки (int | str) @ Meta; 🔘цепочка T @ m1 @ m2 разворачивается в плоскую Annotated[T, m1, m2], без вложенности; 🔘под капотом появляется встроенный тип types.AnnotatedType на C, а typing.Annotated станет ссылкой на него; 🔘старая форма Annotated[X, Y] никуда не денется, остаётся для совместимости. Сокращение нацелено на Python 3.16, до этого его можно будет пробовать через typing_extensions. @zen_of_python

aiohttp выпустил 3.14.0 — крупный минорный релиз асинхронного HTTP-клиента и сервера. Упор на типобезопасность и быструю работу с JSON. Что внутри: 🔘 типобезопасные ключи контекста RequestKey и ResponseKey вместо строковых ключей в request[...] — промах по типу теперь ловит чекер, а не прод; 🔘 работа с JSON прямо в байтах: json_bytes_response и send_json_bytes отдают уже сериализованные байты, без лишнего прохода через строку; 🔘 в WebSocket появился decode_text — получить TEXT-фрейм сразу как bytes и скормить его, например, orjson; 🔘 encode_basic_auth для аккуратной сборки заголовка Basic-аутентификации; 🔘 cleanup-контексты приложения теперь умеют асинхронные менеджеры контекста. Если держите сервисы на aiohttp, апгрейд бесплатно даёт и более строгие типы, и меньше накладных расходов на JSON под нагрузкой. @zen_of_python

Matplotlib выпустил 3.11.0, и главная новость — полностью переписанная работа с текстом и шрифтами. Теперь рендеринг текста идёт через HarfBuzz, FreeType и libraqm. На практике это значит, что подписи на нелатинских письменностях (арабский, иврит, индийские шрифты, сложные лигатуры) наконец отрисовываются правильно, а не рассыпаются. Заодно подключились современные возможности шрифтов. Что ещё приехало: 🔘 метод grouped_bar() — группированные столбчатые диаграммы из коробки, без ручной возни со смещениями; 🔘 размеры фигуры можно задавать в px и cm, а не только в дюймах; 🔘 pie_label для подписей на круговых диаграммах; 🔘 отдельный hatchcolor — цвет штриховки независимо от цвета контура; 🔘 встроенные палитры Okabe-Ito и Petroff, дружелюбные к дальтоникам; 🔘 улучшения 3D-графиков и интерактивности. Группированные бар-чарты и нормальная интернационализация подписей — то, вокруг чего годами городили костыли. А вы что чаще рисуете в Matplotlib? @zen_of_python

scikit-learn выпустил 1.9.0, и впервые у библиотеки появился человеческий способ заглянуть внутрь долгого обучения. Главное — экспериментальный API колбэков. Раньше fit был чёрным ящиком: запустил и ждёшь. Теперь на estimator можно повесить колбэки через set_callbacks(): 🔘 ProgressBar рисует прогресс обучения прямо в Jupyter или терминале; 🔘 ScoringMonitor следит за метрикой по ходу обучения, а не только в самом конце. Что ещё в релизе: 🔘 metric_at_thresholds сразу считает метрики бинарной классификации по сетке порогов, без ручного перебора; 🔘 конфиг sparse_interface переводит трансформеры на sparse arrays вместо устаревших sparse matrices; 🔘 HTML-репр обученной модели теперь показывает не только параметры, но и fitted-атрибуты; 🔘 под капотом перешли на narwhals — библиотека лучше дружит с разными датафреймами, не только с pandas. Колбэки — та фича, которой не хватало годами: видеть, что многочасовой fit реально движется, а не завис. Уже обновились или пока сидите на проверенной версии? @zen_of_python

Pyrefly активно пилят, и по свежему dev-релизу хорошо видно, куда он растёт: за один цикл 250 коммитов от 37 контрибьюторов, и упор сместился на работу в редакторе, а не только на проверку в CI. Напомню, Pyrefly — это статический анализатор типов, конкурент mypy и pyright, написанный на Rust ради скорости. На недавнем Typing Summit показывали, что хорошо типизированный код заметно поднимает успех ИИ-агентов, так что быстрый чекер с живой обратной связью в IDE сейчас особенно к месту. Что приехало для редактора: 🔘 автодополнение литералами: если аргумент имеет тип Literal["a", "b"], редактор предложит ровно эти значения; 🔘 рефакторинги «вынести функцию или класс в новый модуль» и «перенести символ в другой файл» с автоматическим переписыванием импортов; 🔘 навигация по pytest-фикстурам: от использования фикстуры можно прыгнуть к её определению; 🔘 новый LSP-endpoint getExpectedType: редактор спрашивает у чекера, какой тип ожидается в текущей позиции, и подсказывает точнее; 🔘 команда pyrefly coverage check показывает, насколько код покрыт аннотациями типов. А вы уже пробуете быстрые чекеры на Rust или пока остаётесь на mypy? @zen_of_python

Есть страница, которую я бы выдавал вместе с установщиком Python — Comprehensive Python Cheatsheet. Одна гигантская шпаргалка на весь язык: коллекции, итераторы, декораторы, ООП, файлы, async и основные библиотеки. 38 тысяч звёзд на GitHub и регулярные обновления. Ценность не в том, что там есть что-то секретное, а в том, что всё в одном месте и с примерами в три строки. Несколько вещей оттуда, которые регулярно забываются: 🔘Counter не только считает, но и сразу выдаёт топ: Counter(words).most_common(3); 🔘defaultdict(list) избавляет от проверок if key in dict при группировке; 🔘itertools.groupby работает только на отсортированных данных — классическая ловушка; 🔘functools.partial замораживает аргументы: basetwo = partial(int, base=2); 🔘ChainMap собирает конфиг по приоритету: ChainMap(user_settings, defaults); 🔘@dataclass(frozen=True) даёт неизменяемый объект с __eq__ и __hash__ из коробки. @zen_of_python

История недели: линтер ruff в одиночку остановил supply-chain-атаку на популярный проект. 8 июня злоумышленник взломал аккаунт сооснователя GPT-Pilot (ИИ-агент для разработки, 33,7 тысячи звёзд на GitHub) и форс-пушнул прямо в main 758 КБ обфусцированного JavaScript-стилера из семейства Shai-Hulud — того самого, что осенью прокатилось по npm. Дальше произошло прекрасное. CI проекта дважды завернула вредоносный коммит: 🔘сначала ruff format --check споткнулся о нарушение форматирования в _hooks.py; 🔘потом ruff check нашёл E402 (импорт не в начале файла) и I001 (несортированные импорты) в __init__.py. Пайплайн красный, релиз не собрался, стилер до пользователей не доехал. Атакующий получил полный доступ на запись в репозиторий и споткнулся о проверку сортировки импортов. Разбор инцидента опубликовала StepSecurity, и вывод из него шире смешного заголовка. Строгий линтинг в CI — это не только про красоту кода. Вредоносные инъекции почти всегда выглядят чужеродно: обфусцированные блобы, импорты посреди файла, нетипичное форматирование. Линтер с жёсткими правилами превращается в дешёвый детектор аномалий, который не обойти, не понимая кодстайл проекта. Так что когда в следующий раз будете ворчать на красный пайплайн из-за несортированных импортов — вспомните, что ровно эта проверка спасла проект на 33 тысячи звёзд. @zen_of_python

Astral завезла в uv защиту от уязвимостей и малвари. 8 июня в их блоге анонсированы две preview-фичи, и обе бьют точно в больное место экосистемы — атаки через цепочку поставок. Первая: команда uv audit. Сканирует зависимости проекта по базе OSV на известные уязвимости и заброшенный статус пакетов. Работает в 4-10 раз быстрее pip-audit — фирменный стиль Astral на месте. Вторая интереснее: проверка на малварь прямо при установке. С переменной окружения UV_MALWARE_CHECK=1 команды uv add и uv sync сверяют залоченные зависимости с MAL-записями OSV и блокируют установку известной малвари до того, как её код вообще запустится. Учитывая, что свежие PyPI-кампании прячут стилеры в .pth-хуки, которые срабатывают при каждом старте интерпретатора даже без импорта пакета, проверка до установки — единственный момент, когда ещё не поздно. В планах у Astral резолвер, который сам избегает уязвимых версий при разрешении зависимостей, и режим предупреждений только для новых зависимостей, чтобы не тонуть в алертах по старым. Обе фичи в preview, но включить UV_MALWARE_CHECK в CI можно уже сейчас — бесплатная страховка. Кто на uv, попробуйте uv audit на своём проекте и расскажите, сколько насыпало. @zen_of_python