20070
Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/xZOL
«Стандартная рабочая станция» согласно регламенту компании
Читать полностью…
Servy — свежий проект для запуска Python-скриптов (на самом деле не только Python) как Windows-сервисов без боли
Проблема: нужно, чтобы Python-скрипт работал в фоне как сервис Windows: стартовал при загрузке, перезапускался при падении, писал логи. Стандартный sc работает только с приложениями, специально написанными как сервисы, а pythonw.exe + Task Scheduler — костыль без нормального мониторинга.
Решение: Servy. Указываешь путь к Python, скрипт, аргументы, рабочую директорию, env-переменные → Install → готово. Есть GUI для тех, кто не любит CLI.
Что умеет
🔘Логирование stdout/stderr с ротацией (по размеру и дате)
🔘Health checks + автоперезапуск при падении
🔘Мониторинг CPU/RAM в реальном времени
🔘Уведомления о падениях
🔘Pre/post-launch хуки
🔘Экспорт/импорт конфигов
Установка
winget install servy
choco install -y servy
scoop install servy
pyreqwest — новый HTTP-клиент на Rust для Python. GIL-free, HTTP/2 из коробки, sync и async с одинаковым API. Автор — тот же разработчик, который открыл issue #3215 в httpx о 10x просадке производительности при конкурентных запросах.
Зачем переходить с httpx
httpx/httpcore имеют давние проблемы с connection pooling — при 20 конкурентных запросах httpx в 10+ раз медленнее aiohttp. Эти баги висят годами. pyreqwest решает их на уровне архитектуры, потому что connection pool реализован на Rust.
➡️ Если httpx работает — можно не трогать. Но в высоконагруженных системах он станет бутылочным горлышком.
Фичи
🔘HTTP/1.1 и HTTP/2 (у aiohttp нет HTTP/2)
🔘Автодекомпрессия: zstd, gzip, brotli, deflate
🔘TLS через rustls
🔘Connection pooling, стриминг, multipart
🔘Куки, прокси, редиректы, таймауты
🔘Полные type hints, zero Python-зависимостей
🔘Встроенный мок для тестов + подключение к ASGI напрямую
Быстрый старт:
# uv add pyreqwest
from pyreqwest.client import ClientBuilder, SyncClientBuilder
async def example_async():
async with ClientBuilder().error_for_status(True).build() as client:
response = await client.get("https://httpbun.com/get").query({"q": "val"}).build().send()
print(await response.json())
def example_sync():
with SyncClientBuilder().error_for_status(True).build() as client:
print(client.get("https://httpbun.com/get").query({"q": "val"}).build().send().json())
Весь год вы носили футболки и джинсы… Хватит!
Заглядывайте к нам в виртуальную примерочную и выбирайте себе идеальный скин для встречи Нового года.
Осторожно, эти наряды могут наповал сразить ваших коллег…
Реклама
Программисты из Tproger подготовили для вас новогоднее бинго. Заканчивайте работу, пора позалипать на этот шедевр и найти все пасхалки.
@zen_of_python
Python 3.15.0a3 — третья альфа уже доступна, всё по графиу релизов, только что выложили.
До беты ещё полгода, но уже есть интересное.
🔘PEP 799 — встроенный sampling profiler: высокочастотный, низкий overhead, отдельный пакет для профилирования
🔘PEP 686 — UTF-8 теперь дефолтная кодировка (наконец-то!)
🔘PEP 782 — новый C API PyBytesWriter для создания bytes-объектов
🔘Больше предложений по фиксам в сообщениях об ошибках (см. скриншот)
Таймлайн
🔘Альфа 4 выйдет 13 января 2026
🔘Бета: 5 мая 2026
🔘RC: 28 июля 2026
Напоминание: альфа-релизы не для продакшна. Фичи могут измениться или исчезнуть до RC. Но посмотреть уже очень интересно, конечно.
@zen_of_python
Python's random.seed() игнорирует знак числа — и это не баг
Андрей Карпати наткнулся на неочевидное поведение: random.seed(5) и random.seed(-5) дают одинаковую последовательность случайных чисел.
➡️ Как обнаружилось
Карпати работал над nanochat и хотел использовать знак seed'а для разделения train/test данных. Получил баг: train и test оказались идентичными.
➡️ Почему так
В исходниках CPython (_randommodule.c, строка 321) явно вызывается abs():
// "This algorithm relies on the number being unsigned"
n = PyNumber_Absolute(arg);
n -> 2*abs(n) + int(n < 0).import random
random.seed(42)
print(random.random()) # 0.6394267984578837
random.seed(-42)
print(random.random()) # 0.6394267984578837
JetBrains опубликовали State of Developer Ecosystem 2025 — опрос 24 500+ разработчиков из 190+ стран. Python на первом месте с 35%.
Топ языков:
🐍 Python — 35%
☕️ Java — 33%
🌐 JavaScript — 26%
🧩 TypeScript — 22%
🎨 HTML/CSS — 16%
Важная оговорка: это не «все программисты мира», а преимущественно аудитория JetBrains. PyCharm, IntelliJ, WebStorm — у компании сильные IDE именно для Python, Java и веб-стека. Так что выборка смещена в сторону этих языков. Например, Go и Rust-разработчики чаще сидят в VS Code, Swift-девелоперы — в Xcode.
Тем не менее, тренд понятен: Python уверенно держится в топе благодаря AI/ML и автоматизации. 41% Python-разработчиков в опросе используют язык для машинного обучения.
Другие находки:
🔘85% используют AI-инструменты для кода
🔘TypeScript, Rust и Go — лидеры по потенциалу роста
🔘PHP и Ruby продолжают снижаться
Для более объективной картины стоит смотреть несколько источников: Stack Overflow Survey, TIOBE, RedMonk, GitHub Octoverse. Но то, что Python стабильно в топ-3 везде — факт.
@zen_of_python
Pyrefly — модный тайпчекер, написанный на Rust — добавил нативную поддержку Pydantic. Теперь это второй (после Mypy) инструмент, который понимает магию Pydantic-моделей без костылей.
Pyrefly выкатили в апреле 2025 как замену старому Pyre, который использовался для кода инсты в сами-знаете-какой организации. Написан на Rust, работает со скоростью до 1,8 млн строк/сек — это в 14 раз быстрее Mypy и Pyright. В ноябре вышла бета (v0.42+), сейчас актуальная версия 0.45.
Что поддерживается для Pydantic:
🔘ConfigDict и immutable-поля
🔘Strict vs non-strict валидация
🔘Extra fields
🔘Field constraints
🔘Root models
🔘Alias validation
Главное отличие от Mypy: всё встроено в сам тайпчекер, не нужен отдельный плагин. Pyright пока Pydantic нативно не поддерживает.
Зачем пробовать: если у вас большой Python-проект с Pydantic-моделями — Pyrefly даст и скорость проверки, и правильный вывод типов для моделей. Есть VSCode-расширение с autocomplete, go-to-definition, автоимпортами.
Код на гитхабе, документация по интеграции есть как у Pyrefly, так и у Pydantic.
@zen_of_python
JetBrains выпустили PyCharm 2025.3 — и это важный релиз, потому что PyCharm Community Edition официально всё. Теперь есть только один PyCharm: базовые фичи (включая Jupyter) бесплатно, расширенные — по подписке Pro.
Что нового:
🔘uv по умолчанию — при создании проекта теперь предлагается uv вместо venv. Для тех кто не в курсе: uv — это менеджер пакетов от Astral (создатели Ruff), работает в 10-100 раз быстрее pip
🔘LSP-интеграции из коробки: Ruff и Pyright теперь настраиваются прямо в Settings → Python → Tools. Не нужны сторонние плагины
🔘Remote Jupyter — можно подключаться к удалённым Jupyter-серверам и работать с ноутбуками без локальной установки
🔘AI Agents Debugger — дебаггер для агентных систем, показывает что происходит внутри «чёрного ящика»: входы, выходы, метаданные каждого шага
🔘300+ багфиксов
Про миграцию с Community: если использовали Community Edition, при обновлении до 2025.3 произойдёт автоматическая миграция на unified PyCharm. Все бесплатные фичи останутся, плюс добавится Jupyter. Исходники Community по-прежнему открыты, но готовых билдов больше не будет.
@zen_of_python
Вайб-кодер смотрит, как ИИ просит прощения после удаления всех файлов на диске C:
#постИИрония
Вышел Pact Python v3 — библиотека для контрактного тестирования микросервисов. Если кратко: Pact позволяет тестировать взаимодействие между сервисами без поднятия всех зависимостей. Consumer описывает, какие запросы он будет делать и какие ответы ожидает, это записывается в JSON-контракт. Потом этот контракт проигрывается против реального provider'а.
Главное изменение в v3 — переезд с Ruby-бинарников на Rust FFI. Раньше библиотека тащила за собой Ruby-обёртки, теперь всё работает через нативную Rust-библиотеку, скомпилированную под разные платформы. Это дало поддержку Pact Specification v3/v4, нормальные мэтчеры и генераторы данных, async message testing для событийных архитектур.
Что появилось в API:
🔘Мэтчеры: like(), each_like(), regex(), uuid(), each_key(), each_value()
🔘Генераторы тестовых данных
🔘Асинхронные сообщения для Kafka/RabbitMQ и подобных
🔘Улучшенные ошибки при несовпадении контрактов
Пример как может выглядеть код:
from pact.v3 import Pact
pact = Pact("consumer", "provider")
(pact
.upon_receiving("a request for users")
.with_request("GET", "/users")
.will_respond_with(200)
.with_body({"users": like([{"id": 1, "name": "Alice"}])}))
set_state в state_handler, поменяли сигнатуры message handler'ов. Python 3.8 больше не поддерживается.pip install pact-python.
Когда между идеей и продом — преград нет!
В VK любят решать сложные и масштабные задачи, а ещё — быстро реализовывать идеи.
Команда рассказала, каких принципов придерживается в работе и какими результатами гордится.
Переходите по ссылке, там много интересного!
Это #партнёрский пост
Вышла свежая либа для авторизации в Python — PyPermission. Это небольшая RBAC‑библиотека, которая реализует классическую модель ролей по NIST: есть роли, есть права, права можно складывать в иерархии (chat.*, chat.global, ticket.close.own и т.д.), а дальше вы просто спрашиваете у системы: «есть ли у пользователя Х такое‑то право?».
Идея в том, чтобы описать все разрешения декларативно, а не размазывать if role == ... по коду. Вы заводите PermissionNode`‑класс с перечислением прав, настраиваете `Authority и храните роли с привязанными пользователями либо в JSON/YAML‑файле, либо в базе через SQLAlchemy — PyPermission сам разрулит наследование ролей и проверку доступа через метод subject_has_permission.
Устанавливается всё обычным pip install PyPermission, а если нужен конкретный бэкенд хранения, то PyPermission[sqlalchemy] или PyPermission[yaml]. Авторы честно помечают проект как alpha: API ещё могут поломать, но уже есть рабочие примеры, тесты и заготовленная документация, так что если вы как раз думаете, как аккуратно оформить права в своём сервисе или админке на Python, это хороший кандидат попробовать.
Код в репо, отдельно документация.
@zen_of_python
Вышел Hatch v1.16.0 с поддержкой монорепозиториев, dependency groups по PEP 735 и генерацией SBOM. Если не знакомы с этим инструментом, Hatch — это современный менеджер проектов на Python, который объединяет управление виртуальными окружениями, зависимостями, сборку пакетов и публикацию в PyPI. В общем, всё в одном месте: от создания нового проекта до его релиза.
1️⃣Главная фича релиза — workspaces, которые позволяют работать с монорепами. Раньше если у вас было несколько связанных пакетов в одном репозитории, приходилось городить костыли или переходить на другие инструменты. Теперь можно просто указать в pyproject.toml список пакетов через workspace.members, и Hatch автоматически установит их все в одно окружение в режиме editable. Работает как workspace в Cargo или npm — все пакеты в одном виртуальном окружении, IDE видит их все, pytest может импортировать что угодно.
3️⃣Второе нововведение — поддержка PEP 735 dependency groups. Это стандартизированный способ группировать зависимости прямо в pyproject.toml, не создавая кучу отдельных файлов типа requirements-dev.txt, requirements-test.txt и так далее. Теперь можно держать всё в одном месте: группы для разработки, тестирования, линтеров и т.д. Причём это именно стандарт, а не очередное проприетарное решение одного инструмента.
3️⃣Также добавили опцию sbom-files для включения Software Bill of Materials в пакеты. SBOM — это, по сути, полная спецификация всех компонентов и зависимостей вашего софта, что становится важным для безопасности и compliance. Если нужно отслеживать, что именно входит в ваш пакет и откуда оно взялось, теперь можно это делать стандартным способом.
Код в репо, или вот прямая ссылка на новый релиз.
@zen_of_python
Выпущен Mesa 3.4.0 — фреймворк для агентного моделирования на Python
➡️ Что такое агентное моделирование
Вместо описания системы уравнениями — задаёте простые правила для отдельных «агентов» (птицы, машины, люди) и смотрите, как из их взаимодействий возникают паттерны. Как формируются пробки? Как распространяются эпидемии? Как стаи птиц самоорганизуются? ABM (agent-based model) отвечает на такие вопросы.
➡️ Что такое Mesa
Основной Python-фреймворк для ABM. Интегрирован с NumPy, pandas, Matplotlib. Даёт инструменты для пространственных отношений, планирования агентов, сбора данных. Используется для моделирования эпидемий, рыночной динамики, экологических систем.
➡️ Что нового в 3.4.0
🔘Единое время симуляции. Раньше время было разбросано: model.steps в простых моделях, simulator.time в discrete event. Теперь единый model.time для всех.
🔘Воспроизводимость batch run. Новый параметр rng для явного контроля random seeds. Раньше при фиксированном seed все итерации давали одинаковые результаты вместо независимых реплик.
Прочее:
🔘Визуализация: поддержка AgentPortrayalStyle в Altair
🔘Удалён экспериментальный cell space → стабильный mesa.discrete_space
🔘Python 3.12+ обязателен
🔘Миграция на новую GitHub-организацию mesa
📎 Код на GitHub, подробнее в заметках по релизу, есть онлайн-демо
На скриншоте — классический пример Wolf Sheep: волки (красные) охотятся на овец (голубые), овцы едят траву (зелёные клетки). Справа — график динамики популяций: видно, как система приходит к равновесию.
@zen_of_python
Вышел Gazetteer — офлайн геокодер на Python, который не врёт на границах
Небольшое напоминание, зачем это вообще нужно:
➡️ Reverse geocoding — когда есть координаты, а нужно понять что там: страна, регион, город. Нужно для аналитики доставки, логистики, геотаргетинга, обработки GPS-логов. Проблема: большинство офлайн-решений ищут ближайшую точку (nearest-neighbor). У границ это ломается — ближайший город может быть в другой стране.
Gazetteer проверяет, в какой полигон реально попадает координата. KD-Tree для быстрого отсева + валидация вхождения в polygon.
Характеристики
🔘210+ стран, 145 000+ административных границ
🔘10 000 координат за <2 секунды (<0,4 мс на точку)
🔘Single-process и multiprocessing
🔘Без внешних API — никаких лимитов и платежей
🔘Автор говорит, что начинал как toy project, но оказалось production-ready.
📎 Код на GitHub, документация на сайте
@zen_of_python
Tryolabs опубликовали 11-й ежегодный топ Python-библиотек
Команда перелопатила сотни проектов и отобрала те, что реально полезны в продакшене. Критерии: практическая польза (не хайп), активная поддержка, понятная ценность для разработчика. AI-библиотек могло быть 90%, но список специально разделили на две части.
➡️ Категория «Не ИИ»
0️⃣ty — тайпчекер на Rust от Astral (авторы ruff и uv). Инкрементальный анализ на уровне функций — меняешь одну функцию, перепроверяется только она
1️⃣complexipy — измеряет когнитивную сложность кода (не цикломатическую). Есть GitHub Action, pre-commit хук и расширение для VS Code
3️⃣Kreuzberg — извлекает данные из 50+ форматов, работает на Rust, биндинги для Python/TS/Ruby/Go. Есть CLI, REST API и MCP-сервер
3️⃣throttled-py — rate limiting с пятью алгоритмами (Fixed Window, Token Bucket, GCRA и др.), поддержка Redis и async
4️⃣httptap — waterfall-визуализация HTTP-запросов: DNS, TLS handshake, время ответа — всё по фазам
5️⃣fastapi-guard — security-мидлварь для FastAPI: IP-фильтры, геоблокировка, детект SQL-инъекций
6️⃣modshim — оверлей модификаций поверх чужих модулей без monkey-patching и форков
7️⃣Spec Kit — спецификации как источник истины для AI-ассистентов. Пишешь spec → AI генерит код по плану, а не угадывает (и всё же что-то про ИИ — прим. ред.)
8️⃣skylos — поиск мёртвого кода + детект уязвимостей, включая паттерны vibe-coded кода
9️⃣FastOpenAPI — автогенерация OpenAPI-документации для Flask, Falcon, Tornado, Django и ещё 4 фреймворков
➡️ Категория «AI/ML/Data»
0️⃣MCP Python SDK + FastMCP — стандарт подключения LLM к внешним данным (Anthropic)
1️⃣TOON — Token-Oriented Object Notation, JSON-like, но YAML-стиль для вложенности + CSV-формат для массивов. Экономия 40-60% токенов, заголовки с длиной помогают LLM валидировать структуру
3️⃣Deep Agents — агентный фреймворк с planning через write_todos/read_todos, файловой системой (ls, read_file, edit_file), спавном субагентов
3️⃣smolagents — агенты в ~1000 строк кода. LLM пишет действия как Python, а не JSON → на 30% меньше шагов на бенчмарках. Поддержка любых LLM, E2B/Docker/WASM sandbox
4️⃣LlamaIndex Workflows — event-driven архитектура: степы + события вместо DAG. Async-first, автовывод типов из аннотаций, стриминг результатов, чекпоинты для возобновления
5️⃣Batchata — единый интерфейс для batch API Anthropic/OpenAI/Gemini. Экономия 50%, лимиты по стоимости, dry-run для оценки расходов, Pydantic-валидация выходов
6️⃣MarkItDown — PDF/DOCX/PPTX/Excel/HTML/аудио → Markdown. Сохраняет структуру (заголовки, таблицы, списки)
7️⃣Data Formulator — визуализация через natural language + drag-n-drop. Указываешь поля которых ещё нет («profit_margin») → AI генерит трансформацию
8️⃣LangExtract — извлечение структурированных данных с точной привязкой к позиции в тексте (character offset). Критично для медицины/юридики. Few-shot, чанкинг для длинных документов, HTML-визуализация
9️⃣GeoAI — мост между PyTorch/Transformers и геоданными. Поиск спутниковых снимков → подготовка датасета → обучение → инференс → визуализация через Leafmap
@zen_of_python
Clean Architecture в Python: не догма, а инструмент — разбор от разработчика с 30-летним стажем
Макс Кирхофф взял интервью у Сэма Кина — автора книги «Clean Architecture with Python». Сэм прошёл путь от стартапов до AWS и делится практическим подходом к архитектуре.
Ключевые моменты
🔘Clean Architecture — не «всё или ничего», а набор принципов под твой контекст
🔘Главная ценность — грамотное управление зависимостями и чёткая доменная модель
🔘Хорошая архитектура = тестируемый код (связь прямая)
🔘Бонус: чистая архитектура упрощает работу с AI-ассистентами при написании кода
Почему важно
Python любят за прагматику — и можно сохранить её, не скатываясь в спагетти-код. Архитектурные принципы адаптируются, а не навязываются.
📎 Видео на YouTube или в этом посте
@zen_of_python
Astral выпустили ty — type checker для Python, который в 10-60x быстрее mypy и Pyright
Astral — это те ребята, которые сделали uv и Ruff. Теперь у них полный тулчейн для Python: пакеты, линтинг, форматирование и type checking — всё на Rust, всё безумно быстрое.
Что такое ty
Type checker + language server. Альтернатива mypy, Pyright и Pylance. Написан на Rust, спроектирован с нуля под инкрементальность — пересчитывает только то, что изменилось.
Скорость
🔘Без кэша: 10-60x быстрее mypy и Pyright
🔘В редакторе после правки файла в PyTorch: 4.7ms (Pyright — 386ms, Pyrefly — 2.38 сек)
🔘Это 80x и 500x разница соответственно
Что умеет
🔘First-class intersection types, продвинутый type narrowing, reachability analysis
🔘Диагностики как у Rust-компилятора — показывает контекст из нескольких файлов, объясняет почему ошибка и как починить
🔘Полноценный LSP: Go to Definition, Rename, Auto-Complete, Auto-Import, Inlay Hints
Как попробовать
uv tool install ty@latest
Kreuzberg v4 — вышла новая версия библиотеки для извлечения текста, таблиц и метаданных из 56+ форматов.
Была на Python, теперь переписана на Rust, в 5-15 раз легче конкурентов, есть готовые биндинги под популярные языки. Есть настоящий async без GIL и стриминг для гигабайтных файлов.
Главное: 16–31 MB полная установка против 146 MB – 9,7 GB у Unstructured/Docling/MarkItDown. Также в новой версии встроили эмбеддинги (FastEmbed + ONNX), семантический чанкинг, определение 68 языков и MCP-сервер для Claude Desktop.
Установка для Python:
pip install kreuzberg
Команда urllib3 столкнулась с неприятным открытием: механизм DeprecationWarning в Python фактически не работает. Библиотека три года предупреждала об устаревших API — через документацию, changelog и встроенные предупреждения. В версии 2.6.0 эти методы удалили. И всё сломалось.
Что произошло: после релиза посыпались баг-репорты от Kubernetes-клиента, Fastly, Airflow и других крупных проектов. Разработчики были в шоке — никто не видел предупреждений и не знал, что API исчезнет. Команде urllib3 пришлось срочно откатывать изменения и возвращать удалённые методы.
Почему так вышло: DeprecationWarning в Python по умолчанию отключён. Интерпретатор просто игнорирует эти предупреждения, если разработчик явно не включил их показ. В итоге API годами кричал о своей устарелости, но его никто не слышал.
Какие есть варианты:
🔘Использовать UserWarning вместо DeprecationWarning — он не игнорируется по умолчанию
🔘Делать более частые мажорные релизы по SemVer, как в криптографических библиотеках
🔘Менять культуру работы с предупреждениями в экосистеме — но это долгий путь
Вывод для авторов библиотек: если полагаетесь только на стандартные предупреждения — велика вероятность, что их никто не увидит до момента, пока код не сломается.
@zen_of_python
PyAtlas — интерактивная карта 10 000 самых популярных пакетов PyPI, где похожие библиотеки расположены рядом друг с другом.
Как работает: описания пакетов прогоняются через sentence transformer → получаются эмбеддинги → UMAP сжимает их в 2D → кластеризация группирует по темам. В итоге веб-фреймворки оказываются в одном углу, ML-библиотеки в другом, тулзы для тестирования в третьем.
Что можно делать:
🔘Просто тыкать и исследовать экосистему Python с высоты птичьего полёта
🔘Найти пакет, который уже используешь, и посмотреть что рядом — там будут альтернативы и связанные инструменты
🔘Обнаружить библиотеки, о которых не слышал, но которые решают похожие задачи
Практическая польза: когда ищешь «что-то вроде X, но для Y» — карта покажет соседей по смыслу, а не по алфавиту. Или когда хочешь понять что вообще существует в какой-то нише.
Под капотом: Python, sentence-transformers для эмбеддингов, UMAP для редукции размерности, HDBSCAN для кластеризации. Код открыт на GitHub.
@zen_of_python
Вышел release candidate pandas 3.0 — мажорный релиз с breaking changes, который готовили несколько лет. Стабильная версия ожидается через пару недель.
Главные изменения:
🔘Строки теперь отдельный dtype — больше никакого object для текстовых колонок. Новый str dtype под капотом использует PyArrow (если установлен), иначе fallback на NumPy. Это даёт строгую типизацию, лучшую производительность и меньше памяти.
🔘Copy-on-Write включён по умолчанию — конец путанице view vs copy. Теперь любой срез DataFrame/Series ведёт себя как копия. Chained assignment больше не работает, SettingWithCopyWarning удалён. Внутри pandas всё ещё использует views для оптимизации, но API стал предсказуемым.
🔘Datetime resolution inference — при создании datetime из строк pandas теперь сам определяет нужную точность (секунды, миллисекунды, микросекунды) вместо дефолтных наносекунд.
Удалено:
🔘DataFrame.applymap → используйте map
🔘Series.view и Series.ravel
🔘Поддержка Python 2 pickle
🔘ArrayManager
🔘Куча deprecated параметров
Новая политика deprecation: сначала DeprecationWarning, потом FutureWarning в последнем минорном релизе, потом удаление. Меньше внезапных поломок.
Потестить: pip install --upgrade --pre pandas, полный список изменений в рели-ноутсах.
@zen_of_python
Летим зимовать ✈️
Когда холодает, айтишники пакуют чемоданы, а мы разыгрываем ваучер на 50 000 рублей в Островке.
Поехать к морю или остаться среди снежных пейзажей — выбирайте сами!
Чтобы участвовать, нужно оставить любую реакцию под этим постом и подписаться на каналы ниже:
😎 Типичный программист
🐸 Библиотека программиста
🟢 Ostrovok! Tech
Теперь осталось нажать на кнопку участия под этим постом и вы в игре!
Итоги подведём 12 декабря. Победителя выберем с помощью бота. Подробнее с правилами можно ознакомиться здесь.
Всем удачи!
Участников: 19
Призовых мест: 1
Дата розыгрыша: 19:00, 12.12.2025 MSK (4 дня)
Команда Puzl Cloud выложила в опенсорс KubeSDK — Python-клиент для работы с Kubernetes API. Основная идея: сделать типизированный async-first клиент с минимумом зависимостей, который удобно использовать в продакшене и при работе с несколькими кластерами одновременно.
Чем отличается от официального kubernetes-client/python:
🔘Полностью асинхронный из коробки (не как обёртка поверх sync-кода)
🔘Все методы и модели типизированы — IDE нормально автокомплитит
🔘Встроенный генератор моделей: скармливаешь ему Kubernetes API — получаешь dataclasses для всех ресурсов, включая CRD
🔘Единый интерфейс для core-ресурсов и custom resources
🔘Заточен под высокую нагрузку и мульти-кластерные сценарии
Есть альтернативы — kubernetes_asyncio, kr8s, lightkube — но у каждой свои компромиссы. kubernetes_asyncio генерируется из OpenAPI и тоже async, но не такой developer-friendly. kr8s поддерживает и sync, и async, но там другой подход к моделям.
Код в репо, установка pip install kubesdk[cli].
@zen_of_python
Cookiecutter — это CLI-утилита для генерации проектов из шаблонов. Если вам надоело каждый раз копипастить структуру папок, настраивать pyproject.toml, README и прочую обвязку — инструмент закрывает боль.
Работает просто: берёте готовый шаблон (свой или чужой с GitHub), запускаете cookiecutter, отвечаете на вопросы в интерактивном режиме — и получаете готовую структуру проекта с подставленными значениями. Шаблоны используют Jinja2, так что можно делать условную генерацию, циклы и любую логику внутри. Переменные задаются в cookiecutter.json, там же можно указать дефолтные значения и валидацию. Есть хуки для запуска скриптов до и после генерации — например, сразу инициализировать git или установить зависимости.
На GitHub уже куча готовых шаблонов: cookiecutter-pypackage для Python-пакетов, cookiecutter-django для Django-проектов, шаблоны для pytest-плагинов и много других. Проект зрелый — 24 тысячи звёзд, почти 300 контрибьюторов, используется в 35 тысячах репозиториев. Работает на Windows, Mac и Linux, поддерживает Python 3.8–3.12.
Быстрый старт: pipx install cookiecutter или python -m pip install --user cookiecutter, затем cookiecutter gh:audreyfeldroy/cookiecutter-pypackage — и через пару вопросов у вас готовый Python-пакет со всей структурой.
Код в репо.
@zen_of_python
Автор два года пилил свою библиотеку для Dependency Injection в Python и наконец выкатил её в продакшен-ready состоянии. Называется python-injection, и главная фишка — минимум конфигурации и максимум простоты.
Работает всё на декораторах и type hints: вешаете @injectable или @singleton на класс, а потом @inject на функцию — и зависимости резолвятся автоматически по аннотациям типов. Поддерживаются четыре типа времени жизни: transient (новый инстанс каждый раз), singleton, constant (для конфигов) и scoped (привязка к контексту). Есть поддержка async, профили для переключения зависимостей между окружениями и scoped-зависимости через context manager.
Комьюнити сравнивает проект с dependency-injector и другими решениями. Автор отмечает, что его подход менее инвазивный: если захотите избавиться от библиотеки, достаточно убрать декораторы — код останется рабочим. Из минусов — нужно не забывать импортировать модули, где объявлены декораторы, иначе зависимости не зарегистрируются. Работает только на Python 3.12+.
Установка стандартная: pip install python-injection. Дальше импортируете нужные декораторы из injection и размечаете классы и функции.
Код в репо.
@zen_of_python
Python 2025: что посмотреть
В этом году питон‑коммьюнити много говорит про развитие разработчиков, виртуальные окружения, AST‑магию, большие данные и новые паттерны RAG. Для бэкграунда очень советую документалку Python: The Documentary и Q&A с Гвидо и компанией.
Про развитие и карьеру
🔘Выйти из «ада туториалов» — как перестать смотреть бесконечные курсы и начать делать свои проекты (с помощью ИИ тоже).
🔘Менторинг в обе стороны — как помогать другим и параллельно прокачивать себя, не закапываясь в синдром самозванца.
🔘Design Pressure — про то, как инструменты и процессы незаметно гнут архитектуру кода, и что с этим делать.
Инструменты, AST и железо
🔘Виртуальные окружения прошлого, настоящего и будущего (и куда движутся uv‑подобные тулзы).
🔘AST‑парсинг для ускорения библиотек и переписывания кода до попадания в C‑расширения.
🔘Как не умереть от огромных JSON‑ов: стриминг, JSON Lines и более компактные форматы.
🔘Чип PyXL, который гоняет Python прямо в железе и даёт серьёзный буст без переписывания кода.
Данные, RAG и аналитика
🔘Narwhals: один API поверх Polars, DuckDB, PyArrow, pandas и cuDF — меньше if‑ов, больше совместимости.
🔘DuckDB как способ приручить «зоопарк файлов» и собрать нормальные пайплайны.
🔘Structured RAG is better than RAG от Гвидо — как структурированный RAG делает ответы точнее и даёт долгую память ИИ, плюс новая Python‑библиотека под это.
🔘Футбол‑аналитика на Polars, Keras и GNN: превращаем координаты игроков в метрики и модели уровня профклубов.
@zen_of_python
Свежий доклад «Building Data Visualisations in Python in Minutes» — лайвкод‑видео про то, как быстро накидать визуализацию данных на чистом Python с помощью Streamlit, без REST‑сервисов и отдельного фронтенда. Идея простая: у тебя уже есть серверный код, который ходит в базы, файлы и API, а Streamlit позволяет превратить это в аккуратную веб‑страницу с графиками.
Автор начинает вообще с нуля:
🔘ставит Streamlit, пишет минимальный скрипт с st.title и выводом таблицы данных в браузере;
🔘подключает Pandas, подгружает датасет, строит базовые графики в один‑два вызова API Streamlit;
🔘добавляет интерактивность через st.selectbox и кеширование данных декоратором, чтобы всё работало быстро.
Главная мысль: для внутренних дашбордов и чтобы быстро посмотреть, что вообще в данных происходит, часто достаточно одного Python‑файла со Streamlit, который можно запускать локально или на внутреннем сервере. Это сильно проще, чем поднимать BI, тащить React или городить отдельный сервис только ради пары графиков.
Оригинал на YT, если вам там удобнее смотреть.
@zen_of_python