uz
Feedback
Zen of Python

Zen of Python

Kanalga Telegram’da o‘tish

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

Ko'proq ko'rsatish

📈 Telegram kanali Zen of Python analitikasi

Zen of Python (@zen_of_python) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 18 951 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 6 776-o'rinni va Rossiya mintaqasida 34 770-o'rinni egallagan.

📊 Auditoriya ko‘rsatkichlari va dinamika

невідомо sanasidan buyon loyiha tez o‘sib, 18 951 obunachiga ega bo‘ldi.

26 Avgust, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -168 ga, so‘nggi 24 soatda esa -9 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.

  • Tasdiqlash holati: Tasdiqlanmagan
  • Jalb etish (ER): Auditoriya o‘rtacha 10.58% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 6.33% ini tashkil etuvchi reaksiyalarni to‘playdi.
  • Post qamrovi: Har bir post o‘rtacha 2 005 marta ko‘riladi; birinchi sutkada odatda 1 200 ta ko‘rish yig‘iladi.
  • Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 5 ta reaksiya keladi.
  • Tematik yo‘nalishlar: Kontent github, rust, pip, api, install kabi asosiy mavzularga jamlangan.

📝 Tavsif va kontent siyosati

Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/xZOL

Yuqori yangilanish chastotasi (oxirgi ma’lumot 27 Avgust, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.

18 951
Obunachilar
-924 soatlar
-467 kunlar
-16830 kunlar
Postlar arxiv
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