20070
Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/xZOL
T-строки в Python — новая техника форматирования, которая появилась в 3.14 и стала пятой в списке после %, str.format, string.Template и f-строк. Синтаксис очень похож на f-строки (те же {} и выражения), но результатом выражения t"..." будет уже не str, а объект шаблона.
Главное отличие: t-строка сама по себе не делает готовую строку, а возвращает объект Template, внутри которого по отдельности лежат куски текста и интерполяции со всеми их метаданными. Это даёт библиотекам возможность сначала пройтись по этим частям (экранировать, валидировать, форматировать), а уже потом собирать финальный вывод.
Из-за этого t-строки полезны в первую очередь авторам библиотек: логированию, шаблонизаторам, SQL/HTML-обёрткам и любому коду, где хочется контролировать интерполяцию до склейки в строку. Для обычного прикладного кода ничего не меняется — продолжаете использовать f-строки, пока конкретная библиотека явно не попросит передать ей t-строку вместо готового текста.
Нырнуть поглубже можно в статье или на видео к посту.
@zen_of_python
Занятный проект на Python из категории «потому что могу»: Rubiksolver
Коротко: это десктоп-приложение, которое через веб-камеру считывает состояние перемешанного кубика Рубика и показывает пошаговое решение с анимацией в окне на PySide6 с отрисовкой через OpenGL и обработкой изображения в OpenCV. Проект позиционируется как учебный — подойдёт тем, кто хочет понять базовые приёмы компьютерного зрения и графики на практике.
Сканирование: показываете камере по одной грани по заранее заданным правилам. После скана жмёте Play, чтобы запустить анимацию, или листаете шаги кнопками Previous/Next — так удобно проверять, что распознание и сама сборка идут корректно.
Установка: клонируете репозиторий, выполняете uv sync для зависимостей и запускаете uv run rubiksolver — автор использует современный менеджер uv, так что установка занимает минимум времени.
Автор отмечает, что на Android встречаются решалки, но чаще всего там состояние кубика приходится вбивать руками, без автосканирования камерой — здесь как раз закрыта эта боль.
@zen_of_python
Все программисты немного Никита
@zen_of_python
Статья «Building a CI/CD Pipeline Runner from Scratch in Python»
Автор показал, как собрать с нуля свой мини‑раннер для CI/CD на Python для случаев без доступа к GitHub Actions/GitLab Runner, чтобы понять, что происходит под капотом и запускать пайплайны в изолированных окружениях без облака. Ключевая идея простая: раннер — это оркестратор, который парсит YAML, строит граф зависимостей, запускает задачи в контейнерах, стримит логи и пробрасывает артефакты между задачами.
Из примеров: классика со стадиями build/test/deploy, где build кладёт сборку в dist/, тесты берут контент из dist/ и запускаются параллельно, а деплой на прод запускается только в ветке main. Артефакты складываются во внутреннюю .pipeline_artifacts и перед каждым шагом подтягиваются по списку нужных задач, при этом рабочая папка монтируется в контейнер, а команды шага объединяются в одну строку shell.
Такой раннер пригодится для локального теста конфигов или учебных задач, когда хочется гибкости без внешних сервисов. До продакшен уровня остаются распределённое выполнение, кеши зависимостей, матричные сборки, секреты, сервис‑контейнеры и ретраи, но базовая архитектура — парсер, планировщик, исполнитель и менеджер артефактов — уже закрывает основные потребности.
@zen_of_python
Гвидо ван Россум рассказал о Structured RAG — подходе, когда мы не просто режем документ на куски и превращаем в векторные эмбединги, а заранее вытаскиваем из текста структурированные «знания» (сущности, типы, действия, связи) и храним их в обычной базе. На этапе запроса вопрос тоже приводится к такому же структурному виду, ищутся совпадения по полям, а при достаточном лимите токенов добавляются исходные фрагменты текста. По словам Гвидо, это даёт более точные ответы, выдерживает длинные диалоги и ускоряет сложные запросы.
Почему это лучше классического RAG с векторами: векторы громоздки, по большим документам совпадения «размываются», а полнота (recall) заметно проседает; озвучена оценка порядка 60%. В Structured RAG основная работа переносится на этап индексации, поэтому сам поиск получается дешевле и легче масштабируется. Плюс можно делать простые выводы по типам (например, если кто-то указан как artist, то это person), что помогает отвечать на вопросы «кто из людей…».
На демо Гвидо показывал поиск по скетчам Monty Python и по собственной почте: система умеет пополнять память на лету, так что к фактам и диалогам можно возвращаться спустя время. Эмбеддинги при этом используются минимально — как вспомогательный механизм для синонимов и родственных терминов; а GraphRAG здесь не конкурент, а соседний подход: Structured RAG выигрывает инкрементальной индексацией без тяжёлой кластеризации.
Код открыт: пакет typeagent уже доступен на PyPI. Исходники лежат в репозитории. Это ранний прототип; для запуска нужен ключ к LLM‑провайдеру (в докладе — OpenAI).
В посте дубляж на русский, оригинал на YT.
@zen_of_python
Бро, ты можешь тут реализоваться и т.д.
Став частью ОТП Банка, именно ты сделаешь сильнее всю команду! Расти, учись и пробуй новое — это твой шанс создать что-то по-настоящему крутое.
Присоединяйся к ребятам и делись роликом с теми, кто тоже готов к переменам 🚀
В экосистеме Python есть несколько разных файлов, которые отвечают за зависимости: requirements.txt, uv.lock, pyproject.toml, да сами библиотеки установленные в venv в конце концов, это тоже некоторая фиксация зависимостей.
Всем этим можно управлять с помощью uv: на картинке граф переходов, как из одного набора перейти к другому. Сохраняйте как шпаргалку.
Под «libs in env» подразумевается виртуальное окружение, созданное с помощью uv venv.
@zen_of_python
Свежий опен-сорс проект от Python-энтузиаста — httpmorp. Это HTTP‑клиент с фокусом на имитацию браузера. Автор заточил код для маскировки запросов, чтобы всё выглядело так, как будто их делает Chrome 142. При этом API максимально совместим с обычным requests: те же get/post, Session, cookies, и ставится обычным pip install httpmorph.
В проекте используется BoringSSL и nghttp2, чтобы TLS/HTTP2 сигнатуры совпадали с браузером. Есть поддержка асинхронных клиентов, пулов соединений и прокси с авторизацией. Цель инструмента — правдоподобная мимикрия TLS/HTTP, а не максимальная скорость; за перформансом лучше смотреть на httpx/aiohttp. Подробнее в документации.
Автор подчёркивает, что проект пока учебный и не для продакшена; из зрелых альтернатив рекомендует обратить внимание на curl_cffi. Тем не менее, инструмент полезен, если ваш скрипт блокируют несмотря на корректный User‑Agent.
@zen_of_python
Цепочка поставок в Python — это путь ваших зависимостей из публичного реестра до проекта. То, что вы ставите через pip. Если по дороге попадаются уязвимости или подмена артефактов, а сборка автоматизирована, проблемы могут внезапно прилететь прямо в прод.
Есть такая компания Chainguard — всячески топят за то, что открытые источники это опасно и их хорошо бы сделать безопасными. Что они делают: пересобирает популярные пакеты PyPI в своей контролируемой среде и публикует их как более безопасные артефакты. Есть и отдельный индекс с бэкпорт‑исправлениями High/Critical CVE для старых версий, чтобы не переходить на мажорные апгрейды только ради патча безопасности.
К сборкам прикладываются проверяемые метаданные: SBOM (понятный список компонентов пакета) и attestations/provenance (подписанное происхождение и способ сборки). Эти данные читают инструменты экосистемы, поэтому можно автоматически проверять, чем и где собран артефакт.
Подключение обычно делают через репозиторий‑менеджер вроде Artifactory, Nexus или Cloudsmith: ставите Chainguard приоритетным источником, а PyPI оставляете как резерв. Так вы получаете «чистые» сборки там, где они есть, и не ломаете процесс там, где нужного пакета пока нет.
Подробнее в официальной документации.
Аналогичный проект есть у Аnaconda. И тоже платный.
В целом это логично, если ты не доверяешь толпе авторов, то ответственность на себя берёт кто-то другой, выполняет работу и эта работа стоит денег. Но хотелось бы, конечно, что-то более доступное.
А как вы решаете вопросы безопасности? Вас пугает толпа зависимостей проекта, за которой реально не так то просто уследить?
#поделитесь_своим_опытом
на @zen_of_python
Python — единственный нормальный язык программирования
@zen_of_python
Не ждали, а она тут — новая версия Python 3.14 🚀
Лучше просто кликнуть по ссылке сейчас и послушать краткий обзор от Евгения Афонасьева, тимлида разработки Antifraud в Авито, чем потом упускать полезные фичи и искать этот пост.
В ролике ребята разобрали, как небольшие обновления, так и те, что лучше внедрять в свою работу уже сейчас.
📺 Смотрите и обсуждайте по ссылке!
Это #партнёрский пост
В Python 3.14 появилось фишка, которая реально меняет дебаг live-процессов: безопасный внешний интерфейс отладки по PEP 768, который позволяет подключаться к уже запущенному питоновскому процессу по PID — без перезапуска и без ломания рантайма на ровном месте. В практическом виде это значит, что теперь можно сделать обычный attach встроенным pdb: python -m pdb -p <PID>, залезть внутрь, посмотреть состояние, выполнить код — как будто запускал под отладчиком с самого начала.
Главная фишка — все происходит в «безопасных точках» интерпретатора, без хака с инъекцией машинного кода через ptrace/LLDB и без риска словить краш, гонки за GIL или порчу памяти при сборке мусора. Интерфейс кооперируется с eval loop CPython и просто просит интерпретатор выполнить небольшой скрипт, когда это безопасно; под капотом для этого добавили пару полей в PyThreadState и используют существующий eval_breaker, поэтому накладных расходов в обычном режиме нет.
Для инструментов завезли sys.remote_exec(pid, path_to_script): можно подложить .py-файл и он выполнится в целевом процессе при первой возможности, что удобно для быстрых диагностик: распечатать стек, проверить состояние, собрать метрики, даже если это прод и процесс нельзя трогать. Момент важный для продакшена и безопасности: механизм можно отключить через переменные/флаги (PYTHON_DISABLE_REMOTE_DEBUG, -X disable-remote-debug, сборка без поддержки), а любые вызовы проходят через audit hooks, так что всё прозрачно и контролируемо для админов.
Если хотите детали и хороший разбор, у surister вышел пост после выступления Пабло Галиндо (соавтора PEP): там с примерами, почему старые подходы были хрупкими, и как новый протокол делает attach нормальным инструментом, а не рулеткой с падениями.
Ещё раз супер-кратко: теперь attach к живому Python — это стандартная возможность CPython 3.14, с нулевой ценой в рантайме и без трюков уровня «инжектим код в произвольной точке», что сильно упрощает жизнь при отладке долгоживущих сервисов и edge/IoT кейсов.
А вы знали, что так можно?
Как провести проверку типов в 1,8 миллионах строчек Python-кода за секунду? Нил Митчел рассказывает как новый тайп-чекер Pyrefly достигает такой скорости (дубляж на русский).
Аннотации типов появились ещё в 2014 году и с тех пор стали значительно сложнее: дженерики, подтипы, flow types, field refinement и другие не всем даже известные слова. Pyrefly моделирует и проверяет эту сложную систему и делает это быстро.
В принципе тем же самым занимается uv ty, но у ребят из Astral немного другой подход: дать пользу программисту аккуратно, не ошибиться случайно в коде, который хоть и без типов, но теоретически может быть валидным. Можно сказать, что Pyrefly более агрессивный и стабильный, хотя оба проекта ещё в альфе.
Попробовать можно прям на сайте проекта: pyrefly.org/sandbox
Что ж, наконец-то кто-то сможет угнаться за скоростью написания вайб-кода и проверить хотя бы типы.
@zen_of_python
Какую версию Python взять, чтобы всё работало без лишних проблем?
С одной стороны, хочется более свежую: в 3.14 завезли free-threading и вообще много чего улучшили по производительности. Но не все библиотеки ещё подтянулись. Например, Numba ещё 3.14 не поддерживает.
Хороший совет — вооружитесь uv и последовательно пробуйте все версии начиная с самой свежей. Первая, которая заработает, и будет вашей. По сути самая свежая из тех, которую поддерживают все зависимости у вас в проекте.
Также полезно посмотреть на релизный цикл (на картинке к посту). Очевидно не стоит брать версии, которые уже не поддерживаются. Спускаться ниже 3.10 будет не самым безопасным вариантом. Ровно как и пробовать то, что ещё не выпущено официально — на 3.15 заглядываться рановато.
По состоянию на ноябрь 2025 версия 3.13 выглядит хорошей золотой серединой. Почти все уже успели добавить поддержку, а от ведущей 3.14 отставание всего на один шаг.
А какие версии вы используете у себя в проектах?
#обсуждение
@zen_of_python
Вопросы подписчиков
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте.
#обсуждение
@zen_of_python
Обвязка вокруг SQLAlchemy Core — sqla-fancy-core. Это не очередной ORM, а надстройка для тех, кто любит писать запросы сам, но хочет строгую типизацию, поддержку асинхронности и понятные транзакции без «магии» сессий.
Главная фишка — другой способ описывать таблицы вместо table.c.column, который нормально дружит с проверкой типов и делает код понятнее. Плюс поверх движка добавлены обёртки и декораторы: они берут на себя создание подключений и управление транзакциями.
Пример:
import sqlalchemy as sa
from sqla_fancy_core import TableBuilder
tb = TableBuilder()
class Author:
id = tb.auto_id()
name = tb.string("name")
created_at = tb.created_at()
updated_at = tb.updated_at()
Table = tb("author")
Вы знали, что у нас есть канал с хитрыми задачками по Python?
Вот прямо сейчас там в комментариях обсуждаем задачу с подвохом.
Каждый рабочий день по одной задачке с квизом, можно сразу проверить себя. И через час пост с подробным объяснением, почему именно так.
С кем знакомятся типичные программисты: 2D-тян или живая девушка?
Согласно недавним исследованиям Vantage Point Counseling Services, треть американцев хотя бы раз состояла в романтических отношениях с ИИ. Появилось даже приложение Loverse для виртуальных знакомств, где вместо реальных людей роль партнёров выполняют чат-боты с искусственным интеллектом.
Мы решили провести своё исследование и выяснить где и с кем сегодня знакомятся пользователи стран СНГ. Пожалуйста, пройдите наш небольшой опрос. Это поможет нашему исследованию.
Пройти опрос.
В этот четверг: онлайн-конференция «Проектная исповедь»
Что будет: разбор проектных ошибок в ИТ-индустрии и совместный поиск путей, как с ними справляться.
Организаторы обещают истории, которые обычно остаются за кадром. Тот самый шанс научиться на чужих ошибках и учесть в своих проектах.
Участие бесплатное, но нужна регистрация. Сделайте это прямо сейчас, чтобы иметь возможность подключиться.
Это #партнёрский пост
ArgMan — легковесный менеджер аргументов командной строки для Python. Позиционируется как более простая замена argparse для небольших проектов.
Из коробки поддерживаются позиционные и опциональные параметры, короткие и длинные флаги вроде -v/--verbose, а также хуки для преобразования типов и валидации. Установка стандартная: pip install argman.
Сейчас не поддерживается парсинг из списка строк (не только из sys.argv) — автор обещает, что сначала допилит подкоманды, а затем добавит более универсальный парсинг. Исходники на GitHub, автор активно отвечает и готов вносить правки и дорабатывать.
На картинке к посту пример использования.
@zen_of_python
Гвидо ван Россум дал интервью на Python-конфе PyBay
Основные темы:
— почему Python стал языком ИИ и что помогает ему быстро адаптироваться под новые задачи;
— надстройки типизации вроде Pydantic;
— функциональные примитивы а-ля lambda/map/reduce и отношение Гвидо к ним.
Ну и, конечно, про вайб-кодинг тоже поговорили.
В посте видео с дубляжом на русский, а оригинал на YT.
@zen_of_python
Да, venv это круто и удобно, но есть проблемы:
— чтобы посмотреть какие внутри пакеты, надо активировать конкретное окружение;
— нет удобного способа посмотреть все venv и что в них творится;
— сколько всё это места на диске занимает непонятно.
Вас это тоже волнует? Нет? А вот один программист настолько устал вбивать постоянно activate бла-бла, что закодил venv-rs — менеджер виртуальных окружений для Python. Написан на Rust, работает быстро. Показывает все окружения в удобном виде прямо в терминале.
Главная фишка venv-rs в том, что это именно интерфейс с навигацией, а не просто набор CLI-команд. Можно быстро просмотреть список всех окружений, установленные пакеты в каждом, узнать размер на диске и скопировать команду активации в буфер одним нажатием. Инструмент рекурсивно ищет окружения в указанной папке и кэширует, чтобы при следующем запуске не тормозить.
В посте автора на Reddit есть сравнительная таблица с другими решениями вроде virtualenvwrapper, venv-manager и uv. Основное отличие — визуальный интерфейс вместо команд. Правда, venv-rs пока не умеет создавать и удалять окружения, только управлять существующими. Также есть нюансы: Mac не поддерживается, а первый запуск может быть долгим, если у вас много окружений с кучей пакетов.
@zen_of_python
Узнали себя? Скорее всего вам нужно на «Проектную Исповедь»
Это не очередная строгая онлайн-конференция, а ежегодное откровение профессионалов в сфере ИТ. Вас ждут:
🔘 Честные истории о выгорании и сложных проектах;
🔘 Кейсы по управлению ресурсами без потери себя;
🔘 Воркшопы по расстановке приоритетов.
Среди самых активных и внимательных участников будут разыграны комплекты мерча для полной перезагрузки
Дата: 13 ноября в 11:00 | онлайн
Участие: бесплатно.
Регистрируйтесь, чтобы воссоединить рабочее и личное «я»: https://tprg.ru/SB5e
Это #партнёрский пост
OpenStax выложили кучу бесплатных учебников, и среди них есть «Introduction to Python Programming» — свежий вводный курс по Python для начинающих и тех, кто хочет подтянуть базу системно. Помимо него у них есть «Principles of Data Science» и ещё много книг по математике и программированию.
Книга интерактивная: в веб-версии есть встроенный OpenStax Python Code Runner, короткие видео-анимации, вопросы на понимание и практикумы прямо по ходу текста. Каждая секция компактная и по делу: цели обучения, 1–3 подпункта объяснения и 1–2 практических задания, чтобы закрепить без отрыва от браузера.
По охвату она идёт от основ ввода-вывода, типов, выражений, условий и циклов к функциям, модулям, строкам/спискам/словарам, ООП и рекурсии, плюс файлы и исключения. В конце есть вводная по data science с NumPy, pandas, EDA и визуализацией; издано в 2024 и доступно под лицензией CC BY 4.0.
И специально для всех, кто не понимает зачем в 2025 читать книги: даже если вы уже что-то программируете на Python: у учебника и курса есть плюс перед интуитивным гуглением — он закрывает то, что вы не знаете, что не знаете. Практика важна, но структурированная программа помогает не наработать кривые паттерны и быстрее выйти на результат.
PDF-версия прикреплена к этому посту.
@zen_of_python
Вот хороший учебный проект по agentic RAG, который можно поднять локально без API‑ключей и облака: только Python, LangGraph и ваш комп. Автор собрал в одном месте весь пайплайн: от подготовки данных до рабочего агента, чтобы новичкам не рыскать по разрозненным гайдам и видео. В отличие от типичных туториалов «кусочками», здесь end‑to‑end реализация с минимальными зависимостями и упором на понятность и практичность.
Что внутри по механике: конвертация PDF → Markdown, иерархическое разбиение на чанки, гибридные эмбеддинги, хранение в Qdrant, параллельная обработка мульти‑запросов, переформулировка вопросов и уточнения у человека при неоднозначностях. Контекст сжимается через саммари, а поверх всего — агент на LangGraph, который сам решает, когда переписать запрос, когда добрать родительские чанки, и когда генерировать ответ; есть простой чат‑интерфейс на Gradio.
Фишка именно в «агентности»: это не линейный проект, а петля с проверками, где агент оценивает достаточность контекста, при необходимости расширяет поиск (например, поднимая родительский уровень чанков) и только потом отвечает. Такой подход лучше тянет сложные вопросы и снижает галлюцинации, потому что решение не зашито жёстко в пайплайн — агент сам выбирает следующий шаг.
Кому зайдёт: если хочется руками понять, как склеиваются рассуждение, ретрив, переписывание запросов и память в реальном агенте — это ровно тот кейс. Репозиторий свежий и минималистичный; можно быстро форкнуть и адаптировать под свои документы.
Совет управляющих Python одобрил два PEP — 798 про распаковку в comprehensions и 810 про явные ленивые импорты, оба целятся в Python 3.15.
PEP 798 добавляет возможность применять распаковку прямо в comprehensions и генераторах: можно использовать символы звездочки для объединения и слияния, например [*it for it in its] или {**d for d in dicts}. Приняли с оговоркой: и синхронные, и асинхронные генераторные выражения должны использовать явные циклы, без yield from, чтобы сохранить простой и единый стиль, ближе к поведению itertools.chain.from_iterable.
PEP 810 вводит явный синтаксис ленивых импортов: lazy import json и lazy from json import dumps, когда модуль реально загрузится только при первом обращении к имени — полезно для ускорения старта и экономии памяти. Совет уточнил детали: .pth не поддерживают ленивые импорты, появится sys.get_lazy_imports(), и будет зафиксирован приоритет между переменной окружения, флагом -X и вызовами sys.set_lazy_imports(), при этом стилистические правила сортировки оставят линтерам и форматтерам.
P.S. Кто такие эти ваши «совет управляющих»? После ухода Гвидо с роли BDFL в 2018 сообщество приняло модель управления PEP 8016 — стратегию языка и финальные решения по PEP принимает избираемый из core-разработчиков Совет из пяти человек. Этот Совет переизбирается после каждого мажорного релиза голосованием среди core-dev’ов и выступает финальным арбитром по спорным вопросам развития языка.
Свежий пет-проект от (видимо) скучающего на досуге питониста — терминальный Git‑клиент на чистом Python, вдохновлённый LazyGit; ставится через pip и работает без внешнего git CLI. Попробовать: pip install pygitzen.
Что даёт: навигация по коммитам, просмотр diff, панель статусов файлов в стиле VSCode, ветко‑зависимая история и индикаторы «пушнуто/локально» без вызова системного git.
Зачем: когда в окружении нельзя ставить ничего кроме Python‑пакетов, нужен «чисто Python» инструмент для Git с удобной навигацией и минимумом интеграций.
Автор просит фидбек по недостающим функциям и удобству UI, так что можете отписаться в репозитории. Вам плюсик в карму, автор порадуется.
Проект, послуживший вдохновением: https://github.com/jesseduffield/lazygit
Ну и, конечно, кто-то написал аналог на Rust, чтобы было ультра-быстро, а скорее просто потому что может: https://github.com/gitui-org/gitui
Как вам такие поделки? Как минимум романтично же, консольные клиенты как будто пахнут старыми добрыми временами, вы не находите?
@zen_of_python
Пользователь Reddit поделился Python-библиотекой для быстрых запросов к файловой системе и выполнения действий над найденными файлами.
Основная идея: вместо кучи строк кода, os.stat и datetime писать так:
query = Query(
where_expr=(AgeDays() > 7) & (Size() > "10 mb") & Suffix(".log"),
from_paths="C:/logs",
threaded=True
)
result_set = query.select()
query(lambda p: p.age_days < 7 and p.size > 10_000_000 and p.suffix == ".log")
cached_property и получим по сути то же самое, но проще.ast и такой синтаксис:query("age_days < 7 and size > 10_000_000 and suffix == '.log'")query(("and", ("age_days", ">", 7),
("size", ">", 10_000_000),
("suffix", "==", ".log")))dir = pathlib.Path('/var')
for file in filter(OlderThan(days=7) & LargerThan(MB=10),dir.rglob("*")):
print(file.as_posix())
python-for-everyone/videos">Python for Everyone | Короткие видеотуториалы
Англоязычный YouTube-канал, прекрасно «грокающий» различные концепции языка, будь то декораторы, миксины или полиморфизм. Каждый ролик — кустарный мультфильм с демонстрацией предельно понятного кода.
#обучение
@zen_of_python