Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/xZOL
Опрос от Tproger: LifeStyle
Если вы тоже хотите знать больше о подписчиках по соседству, пройдите опрос Tproger. Он не только про специализацию и грейд, но больше про окружающую айтишники жизнь. Результатами обязательно поделимся.
#опрос
@zen_of_python
Нейросети в контенте: опрос
Многие из нас в прямой или иной форме создаем контент, будь то личный блог или написание кода для проекта. В Tproger проводят опрос о роли LLM в работе айтишников. Проходите, опрос даже немного познавательный. Результатами мы обязательно поделимся.
#опрос
@zen_of_python
TorchLeet | Литкод про PyTorch
Момент настал, и вы достаточно хардкорный питонист, чтобы осваивать PyTorch, со сложной документацией и безграничными возможностями. Если ваша цель — создать свою ChatGPT, вам точно понадобится хорошо знать этот фреймворк, и с этим поможет опенсорсный специализированный 'LeetCode'. Задачи разделены на четыре уровня сложности, среди тем: функция активации, потери, CNN, RNN, LSTM и даже LLM.
#инструмент
@zen_of_python
10 библиотек Python, которые меняют карьеру
В топе по версии Tproger оказались не новинки, а самая настоящая база. Даже в рамках Python-специальностей (Fullstack Python Developer, Data Scientist, Data Engineer и проч.) есть общий для всех знаменатель — pandas, FastAPI, Django. Взгляните, кто еще попал в подборку, там найдутся и новые «убийцы» привычных технологий.
#инструмент
@zen_of_python
В слоях нейросетей сейчас видят больше красоты
#кек
@zen_of_python
В сети мельтешит мини-тренд «Алфавиты от ChatGPT», и админы заморочились на питоническую версию такого, со встроенными модулями, фреймворками, библиотеками и прочими технологиями. Что бы такого поставить на букву Y?
#кек
@zen_of_python
Вопросы подписчиков
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте;
#вопросы_новичков
@zen_of_python
pyleak | Контроль утечек памяти
Минималистичная библиотека для поиска утечек памяти умеет группировать утекшие объекты по типу, упрощая диагностику. Основной интерфейс — контекстный менеджер leak_checker()
, который можно легко встроить в тесты или отладочные блоки. Отличный выбор для тех, кто хочет контролировать потребление памяти без тяжёлых инструментов.
Репозиторий проекта
#инструмент
@zen_of_python
Django 20 лет!
Если вы сегодня выпьете, ваша женщина не имеет право осудить вас: такие юбилеи бывают нечасто. Соавтор фреймворка Саймон Виллисон поделился историей проекта в своем блоге. Он также признался, что совсем не умеет доводить идеи до ума. Их накопилось так много, что даже пришлось выуживать из Internet Archive.
Теперь можно проводить тест на возраст «А ты помнишь первую версию фреймворка?"
#факт
@zen_of_python
🍾 — Если за такое не грех и бутылочку откупорить
создатели TikTok выкатили БЕСПЛАТНЫЙ аналог Cursor, еще и OPEN-SOURCE
ByteDance (да-да, те самые) выложили на GitHub исходники Trae Agent — ИИ-ассистента для программистов, который умеет писать код, править баги, задавать сам себе вопросы и даже запускать команды в терминале.
То есть буквально как Cursor, но с открытым кодом и без подписки на $60.
Что умеет:
- редактирует файлы и пишет коммиты,
- сам решает, что делать: рефакторить, тестить или гуглить,
- работает с GPT-4, Claude, OpenRouter и даже Doubao (внезапно),
- сохраняет «траекторию» своих действий — можно проверить, что он натворил.
Ссылка на GitHub: тык
@your_tech
pytest-benchmark | Если тесты, то грамотно
Питонический плагин, позволяющий замерять производительность под всевозможными углами. Запускает тесты многократно, сглаживая статистический шум и выявляя реальные изменения скорости выполнения. Плагин выводит в отчете системные параметры (CPU, версия ЯП и др.), чтобы бенчмарки были воспроизводимыми и сопоставимыми. Поддерживается сравнение результатов между запусками, что удобно для отслеживания деградации. Инструмент встраивается в CI/CD-пайплайны.
Цена: бесплатно
Репозиторий проекта
@prog_tools
Почему вам стоит попробовать uv
До недавнего времени написание «однострочных» Python‑утилит оборачивалось головной болью: нужно настраивать виртуальное окружение, докачивать зависимости, проверять соответствие версии Python… uv решила это, предложив Rust‑реализацию лёгкого, быстрого менеджера пакетов, способного:
— автоматически создавать «утилизируемые окружения»;
— скачивать нужные зависимости;
— исполнять вышеописанное и запускать сам скрипт в одну команду.
uv действительно быстр и «бросает настройку окружения в мусорную корзину» .
PEP 723: метаданные прямо в скрипте
PEP 723 — это спецификация, позволяющая внедрить информацию о зависимостях внутри самого файла скрипта. В начале файла прописывается пример:
# /// script
# requires‑python = ">=3.11"
# dependencies = [
# "requests<3",
# "rich",
# ]
# ///
requirements.txt
.pep.py
с вышеописанным PEP‑блоком — и вот что происходит:
$ uv run pep.py
Installed 9 packages in 24ms
[('1', 'PEP Purpose…'), … ]
#!/usr/bin/env -S uv run --script
# /// script
# requires‑python = ">=3.8"
# dependencies = ["youtube-transcript-api"]
# ///
import sys, re
…
transcript = YouTubeTranscriptApi().fetch(video_id)
print(formatter.format_transcript(transcript))
chmod +x ytt
он запускается так:
$ ./ytt https://youtu.be/[video_id]
Installed 7 packages in 10ms
…текст транскрипта…
«С — это причина, по которой придумали Python»
#кек
@zen_of_python
Вопросы подписчиков
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте;
#вопросы_новичков
@zen_of_python
Таро врёт! В отличие от нашей IT-колоды
Цифровые арканы говорят с вами и проливают свет на ранее неведомые потоки информации. Вытяните «Карту дня» и получите мудрый совет судьбы: https://tprg.ru/ldLR
Реклама
Вышел Python 3.14 RC1: релиз-кандидат с ускоренным интерпретатором
Вышел первый релиз-кандидат Python 3.14 — финальный релиз ожидается в октябре. Среди главных новинок:
— JIT-компилятор теперь работает не только на Linux, но и на macOS и Windows;
— Благодаря PEP 779 Python получает полную поддержку свободных потоков — это шаг к более эффективной многопоточности;
— Появились t-строки — новый синтаксис для шаблонов с переменными прямо внутри строк
— Добавлен модуль compression.zstd
для работы с алгоритмом Zstandard прямо «из коробки» и многое другое.
#факт
@zen_of_python
Почему некоторые исключения не попадают в лог и как это исправитьlogging
— это уже целый стандарт записи ошибок в Python. Ваше приложение запускается, сообщения попадают в лог. Но вдруг в продакшене приложение внезапно «падает», а в логах — тишина. Знакомо?
Если да — вы столкнулись с одной из малозаметных, но опасных особенностей Python — «непойманные исключения» (uncaught exceptions
).
В этом посте мы разберёмся, почему такое вообще случается, как надежно логировать любые исключения.
Рассмотрим следующий код:
import logging
logger = logging.getLogger(__name__)
logging.basicConfig(filename="output.log", level=logging.INFO)
logger.info("Application started")
1 / 0 # деление на ноль
Traceback (most recent call last):
...
ZeroDivisionError: division by zero
output.log
будет только:
INFO:__main__:Application started
try / except
, то встроенный модуль никак не участвует в этом процессе. Потому что стандартный Python-интерпретатор выводит непойманные исключения напрямую в stderr, минуя logging.main()
в try / except
:
def main():
logger.info("Application started")
1 / 0
try:
main()
except Exception as e:
logger.exception("Unhandled exception:")
logger.exception()
запишет ошибку и трейсбек. Но есть минусы:KeyboardInterrupt
и проч., если ловите Exception
, а не BaseException
;main()
в каждом скрипте — дублирование;sys.excepthook
sys.excepthook
:
import sys
import logging
logger = logging.getLogger(__name__)
logging.basicConfig(filename="output.log", level=logging.INFO)
def handle_uncaught_exception(exc_type, exc_value, exc_traceback):
logger.critical(
"Uncaught exception. Application will terminate.",
exc_info=(exc_type, exc_value, exc_traceback)
)
sys.excepthook = handle_uncaught_exception
logger.info("Application started")
1 / 0
output.log
появится подробный трейсбек ошибки;stderr
. Но вы можете управлять процессом:Goalkicker: сайт с бесплатными папирами по программированию
Ресурс объединяет сотни PDF-книг по языкам и технологиям: Python, Go, JavaScript, C#, SQL, Docker и десятки других тем. Книги созданы на основе самых полезных ответов Stack Overflow, регулярно обновляются и доступны абсолютно бесплатно.
Так что если нужен быстрый чеклист, подсказка или мини-учебник — вот оно.
@pyainter_bot | ИИ-тренер по Python
Разработчики, которые доводят свои пет-проекты до ума, существуют... Один из них создал питонического тренера в Telegram для собеседований. Среди фичей:
— Система начисления очков;
— Множество разделов (Основы Python, ООП, Базы данных, Тестирование и проч.);
— Режим «злого учителя»: бот гоняет вас на слабые темы;
Проект опенсорсный. Если вам захотелось выставить свою LLM и задать ей свои промты, дерзайте.
Репозиторий проекта
#инструмент #собеседование
@zen_of_python
Построчная безопасность (Row-Level Security) в SQL
RLS — одна из ключевых функций SQL, позволяющая реализовать контроль доступа на уровне отдельных строк таблицы. Вместо того чтобы писать сложные фильтры в каждом запросе, вы можете централизованно задать политику безопасности, которая будет автоматически применяться при чтении или изменении данных. Это упрощает архитектуру приложений и делает защиту данных более надежной.
Зачем это нужно
Обычно контроль доступа к данным реализуется в коде приложения. Например, чтобы пользователи видели только свои записи, вы добавляете фильтр WHERE user_id = @current_user
. Но что, если по какой-то причине фильтр не применится? Чувствительные данные могут стать «достоянием общественности».
С помощью RLS вы перекладываете этот контроль внутрь базы данных. БД сама будет фильтровать строки в зависимости от настроек безопасности — даже если разработчик забудет что-то учесть в запросе.
Как работает RLS
Механизм реализуется через два ключевых механизма:
— Функция фильтрации определяет, какие строки доступны пользователю;
— Политика безопасности (Security Policy) привязывает эту функцию к конкретной таблице и операциям (SELECT, INSERT, UPDATE, DELETE).
Когда вы выполняете запрос к таблице с активной политикой RLS, SQL неявно вызывает фильтрующую функцию для каждой строки и исключает те, доступ к которым запрещён.
Пример
Шаг 1: Подготовка таблицы
CREATE TABLE Sales (
Id INT,
Amount MONEY,
Region NVARCHAR(50)
);
CREATE FUNCTION fn_securitypredicate(@Region AS NVARCHAR(50))
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN SELECT 1 AS result WHERE @Region = SESSION_CONTEXT(N'region');
CREATE SECURITY POLICY SalesFilter
ADD FILTER PREDICATE dbo.fn_securitypredicate(Region) ON dbo.Sales
WITH (STATE = ON);
Sales
автоматически фильтруется.
EXEC sp_set_session_context 'region', 'West';
SELECT * FROM Sales; -- покажет только строки с Region = 'West'
CREATE FUNCTION fn_blockpredicate(@Region AS NVARCHAR(50))
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN SELECT 1 AS result WHERE @Region = SESSION_CONTEXT(N'region');
CREATE SECURITY POLICY SalesBlocker
ADD BLOCK PREDICATE dbo.fn_blockpredicate(Region) ON dbo.Sales
AFTER INSERT, UPDATE
WITH (STATE = ON);
Событие, которое точно стоит твоего внимания — PyCon Russia 2025 уже через неделю!
Это крупнейшая конференция по Python в России, где за два дня ты:
— узнаешь, как другие решают задачи, которые тебе тоже знакомы;
— услышишь доклады уровня middle+ и выше — без воды и маркетинга;
— пообщаешься с теми, кто пишет читаемый код, думает о проде и уважает import this.
Москва, 25–26 июля
2 трека (Python и Data), 3 воркшопа, живая программа, афтепати в первый день.
Вся программа и билеты на сайте, а общение в чате PyCon.
Реклама. ООО "Душевные конференции", ИНН 6671291133
__init__.py
в Python: зачем он нужен и как с ним работать
Файл __init__.py
играет ключевую роль в функционировании модулей и пакетов. В этой посте разберём, зачем нужен этот файл, как его использовать, и какие трюки можно с ним провернуть.__init__.py
используется для обозначения директории как пакета Python. Пакет — это просто каталог, содержащий код, который можно импортировать. До Python 3.3 файл __init__.py
был обязателен для того, чтобы Python распознавал директорию как пакет. Начиная с Python 3.3, это уже не строго обязательно благодаря PEP 420, который ввёл поддержку 'implicit namespace packages'.
Тем не менее, __init__.py
всё ещё активно используется, потому что он позволяет:
— Настроить импорты, переменные окружения и т.д.;
— Реализовать алиасы и проксировать импорты;
— Управлять логикой и поведением при импорте.
Пример: простой пакет с __init__.py
my_package/
├── __init__.py
├── module1.py
└── module2.py
__init__.py
можно явно указать, какие модули экспортируются:
from .module1 import func1
from .module2 import func2
__all__ = ['func1', 'func2']
from my_package import func1, func2
__init__.py
делает интерфейс «плоским».__init__.py
import logging
logging.getLogger(__name__).addHandler(logging.NullHandler())
# Вместо длинного:
from my_package.module1.submodule import ClassA
# можно:
from my_package import ClassA
__init__.py
:
from .module1.submodule import ClassA
__version__ = "1.0.0"
__init__.py
, относительные импорты типа from . import module1
работают корректно.__init__.py
не нужен__init__.py
, которые Python всё равно распознаёт как пакеты. Это удобно, когда вы хотите:__init__.py
.
project/
├── pkg/
│ └── subpkg1/
│ └── a.py
└── other/
└── pkg/
└── subpkg2/
└── b.py
pkg/
нет __init__.py
, Python объединит содержимое в один namespace package. __init__.py
обязателенpytest
(некоторые тест-раннеры не обнаруживают модули без `__init__.py`);Некогда объяснять, пора вершить судьбы 😱
Три разраба прямо сейчас ищут работу — выбери того, кто получит шанс на достойный оффер. Голосуй прямо сейчас!
Все подробности в «Коде найма».
Ngrok: безопасный туннель к локальному серверу за пару секунд
Когда нужно показать локальный проект клиенту или протестировать вебхук от стороннего сервиса, поднимать полноценный сервер в интернете — избыточно. Ngrok решает эту задачу: за секунды пробрасывает туннель из интернета к вашему локальному серверу, выдавая публичный URL. Поддерживает HTTPS, защищённые токены, инспекцию трафика и работает на всех популярных ОС.
Так, вы можете безо всякого труда прямо в VS Code расшарить свой localhost, чтобы похвастаться другу или обсудить детали с клиентом.
#бэкенд #инструменты
Честный ресёрч найма в IT прямо с рынка
Вместе с Proglib мы разобрали, почему айтишники реально уходят с работы, по каким признакам вычислить токсичный коллектив и какие HR-трюки бесят разработчиков больше всего. Если ещё не читали — советуем это исправить❤️
Бонусом мы подготовили ещё два полезных лонгрида из этого исследования:
— Где искать работу в IT: лайфхаки и топ-площадки
— Каких разработчиков переизбыток и кому сейчас сложнее найти вакансию
Сохраняйте и кидайте коллегам!
throttled-py | Ограничение частоты запросов
Если вам нужно защищиться от DDoS-атак, контролировать затраты и в целом оптимизировать производительность, эта библиотека поддерживает популярные алгоритмы: Fixed / Sliding Window, Token Bucket и проч. Она подходит для как синхронных, так и асинхронных приложений. Для хранения состояния лимитов можно использовать как быстрый In-Memory режим, так и масштабируемый Redis-бэкенд. «Питонический дроссель» интегрируется с MCP Python SDK, позволяя эффективно контролировать частоту вызовов в диалоговых процессах моделей.
Репозиторий проекта
#инструмент
@zen_of_python
curlify | Из requests в cURL
Инструмент для преобразования запросов из requests в эквивалентные «курлы». Он автоматически добавляет все необходимые флаги, включая -X
, -H
, -d
, --compressed
и другие, чтобы команда точно отражала параметры исходного запроса. Благодаря опции pretty=True
можно получить красиво отформатированную, многострочную cURL-команду, удобную для чтения и вставки в консоль. Библиотека заботится о безопасности и корректности, надежно экранируя кавычки и специальные символы для совместимости с командной строкой.
Репозиторий проекта
#инструмент
@zen_of_python