Все самое полезное для питониста в одном канале. Список наших каналов: https://t.me/proglibrary/9197 Учиться у нас: https://proglib.io/w/d7f1e6ed Обратная связь: @proglibrary_feedback_bot По рекламе: @proglib_adv Прайс: @proglib_advertising
📱 Python новости
🚀 Релизы и инструменты:
— T-строки официально в Python 3.14 — новый стандарт форматирования строк
— ViperView — визуализатор pip-пакетов — смотрим зависимости проекта наглядно
— PyUiBuilder — drag-and-drop конструктор GUI на Python (tkinter и customtk)
— Bootstrapping Python-проектов с Copier — автоматизация шаблонов, uv и GitHub Actions
👍 Советы:
— Год с uv — плюсы, минусы и стоит ли переходить — опыт использования альтернативы pip+venv
— Python на скорости Rust — как добиться скорости C-подобного уровня
— Введение в MLflow: настройка и запуск — быстрый старт для трекинга экспериментов
🧪 Разработка и производительность:
— Все декораторы в Python — за 9 минут видео — компактное и наглядное объяснение
— Асинхронная обработка запросов в Python: мода или необходимость — разбор реальных кейсов
— Разработка своей системы планирования задач на Python — проект от идеи до реализации
— Мини текстовая RPG-игра на Python — отличный проект для практики
🌐 Django и веб:
— Django внедряет новую систему трекинга фич на GitHub — прозрачность и участие в разработке
— Maps with Django: GeoDjango, Pillow и GPS — создание веб-карт с данными из фотографий
— Введение в тестирование Flask-приложений — маршруты, БД и мокирование с pytest
🛠 Тестирование и автоматизация:
— UI автотесты на Python с PageObject и CI/CD — практика с Allure-отчётами
Библиотека питониста #свежак
💭 Холивар: нужен ли ООП Python-разработчику?
Джун в команде написал Python-скрипт для обработки данных — лаконичный, читаемый, работает безупречно.
На код-ревью сеньор разнёс его в пух и прах: «Где ООП? Без классов и объектов это не код, а любительщина, переделывай».
Джун ответил: «Мой скрипт решает задачу, он понятный и быстрый. Зачем ООП для 150 строк?»
Сеньор был непреклонен, и дедлайн сорвался.
🚫💻 Топ-10 ошибок эволюции интернета: что бы разработчики удалили из современного веба
Сегодняшний интернет — это не только мемы и котики, но и автозапуск видео, всплывающие окна, перегруженный JavaScript, странные архитектурные решения прошлого.
В статье разбираем:
➡️ Какие элементы веба вызывают наибольшую боль у разработчиков
➡️ Почему соцсети, реклама и куки заслуживают изгнания
➡️ Как ошибки типа referer и злоупотребление WordPress превратились в технический долг
➡️ Что бы изменили в JavaScript, если бы можно было откатить всё назад
➡️ Идеи для нового, более логичного и безопасного интернета
Мечты о «перезапуске» веба с чистого листа — это не фантастика, а повод задуматься: а не пора ли нам пересмотреть старые решения?
🔗 Читаем статью по ссылке
🐸 Библиотека фронтендера
💃 Как языки программирования выглядят в стиле Гибли
Мы не могли пройти мимо нашумевшего тренда и попросили ИИ перенести Python во вселенную Миядзаки.
Как вам образ? Расскажите в комментариях ↓
😜 Еще больше персонажей из мира айти в стиле Гибли — в нашем канале @proglib
📈 Как «ленивая разработка» захватывает IT-рынок
Пока мы выстраиваем архитектуру, пишем тесты и спорим о лучших практиках, рынок всё активнее обживают те, кто вообще не пишет код. Low-code и no-code решения не просто живы — они становятся нормой для бизнеса.
Порог входа минимальный, скорость разработки — бешеная, а заказчику всё равно, написано ли это на Java или накликано в визуальном редакторе. Вопрос: как долго останется актуальной классическая разработка?
🔗 Подробнее в статье
🐸 Библиотека джависта
Всегда так 💯
Библиотека питониста #развлекалово
🧰 Инструмент недели: ViperView — визуализатор pip-пакетов
Если вы хотите лучше понять, какие библиотеки занимают место в вашем Python-окружении — попробуйте ViperView. Это простое и удобное десктопное приложение с графическим интерфейсом на PyQt5.
✅ Возможности:
• Отображение всех установленных pip-пакетов: версия, размер и путь
• Интерактивная диаграмма с 20 самыми «тяжёлыми» библиотеками
• Поиск и фильтрация в реальном времени
• Экспорт информации в CSV
• Тёмная тема и современный интерфейс
↗️ ViperView поможет вам наглядно оценить структуру окружения и освободить место, если нужно.
🔗 Репозиторий инструмента: https://clc.to/Jl4t3g
Библиотека питониста #буст
Async-инициализация в Python: какие есть подходы
В Python нет нативной поддержки асинхронного __init__
, поэтому приходится искать обходные пути, если объект требует асинхронной инициализации (например, получения ресурса через await get_resource()
).
⬇️ Вот какие стратегии чаще всего используют — с плюсами и минусами.
1️⃣ @classmethod async def initialize()
class Klass:
def __init__(self, resource):
self.resource = resource
@classmethod
async def initialize(cls):
resource = await get_resource()
return cls(resource)
class Klass:
async def __aenter__(self):
self.resource = await get_resource()
return self
async def __aexit__(self, exc_type, exc, tb):
pass
async with
)async with
при каждом использованииclass Klass:
def __init__(self):
self.ready_event = asyncio.Event()
asyncio.create_task(self._load())
async def _load(self):
self.resource = await get_resource()
self.ready_event.set()
async def use(self):
await self.ready_event.wait()
await do_something_with(self.resource)
await ready_event.wait()
— легко забытьklass = Klass()
await klass.ready()
class Klass:
def __new__(cls, *args, **kwargs):
raise RuntimeError("Используйте `await Klass.create()`")
@classmethod
async def create(cls):
self = super().__new__(cls)
self.resource = await get_resource()
return self
initialize()
— простая async-инициализация без очистки__aenter__
/__aexit__
— нужна очистка или сложный жизненный циклcreate_task()
+ Event
— нужно запускать инициализацию в фоне.ready()
— чистое разделение этапов__new__
+ async — строгий контроль над созданием🎉 T-строки официально в Python 3.14
В конце 2025 года нас ждёт мощное пополнение — в Python появятся template strings (t-strings). Это новая форма строк, которая решает старые проблемы f-строк и открывает дверь к более безопасной и гибкой работе с текстом.
🎌 Что такое t-строки
С f-строками (f"...") мы живём с 2016 года — они удобные, но иногда… опасные. Например:
f"SELECT * FROM users WHERE name = '{user_name}'"
from string.templatelib import Template
template = t"Hello {name}!"
Template
. Их нужно явно обработать, и это даёт пространство для экранирования, валидации и любых безопасных преобразований.evil = "<script>alert('bad')</script>"
template = t"<p>{evil}</p>"
safe = html(template)
assert safe == "<p><script>alert('bad')</script></p>"
html()
может возвращать полноценный HTMLElement
, а не просто строку. Всё гибко..strings
и .values
возвращают кортежи:name = "World"
template = t"Hello {name}!"
assert template.strings == ("Hello ", "!")
assert template.values == (name,)
t"".strings == ("",)
t"{name}".strings == ("", "")
template = t"Hello {name}!"
contents = list(template)
assert contents[0] == "Hello "
assert contents[1].value == name
assert contents[2] == "!"
template = t"Hello {name!s:>8}!"
interp = template.interpolations[0]
assert interp.value == name
assert interp.expression == "name"
assert interp.conversion == "s"
assert interp.format_spec == ">8"
from string.templatelib import Template, Interpolation
template = Template(
"Hello ",
Interpolation(value="World", expression="name"),
"!"
)
🔥 Завтра запускаем ML-ракету: последние места на борту
Уже завтра, 21 апреля, состоится наш воркшоп «Математика машинного обучения на практике», где теория ML превращается в практические навыки.
Что вас ждет:
📍 Работа с реальными данными — табличные датасеты и изображения
📍 Снижение размерности через PCA — научитесь отделять важное от второстепенного
📍 Обучение моделей — Random Forest и градиентный бустинг в действии
📍 Разбор метрик и гиперпараметров — как настроить модель на максимальную эффективность
📍 Написание кода на Python — прямо как реальных проектах
📍 Персональный code review от эксперта — бесценный фидбек для вашего роста
📍 Доступ в закрытый чат участников — нетворкинг и обмен опытом
Кто проводит воркшоп:
Мария Горденко — инженер-программист, старший преподаватель НИУ ВШЭ и Proglib Academy, руководитель магистратуры от ГК Самолет и Альфа-Банка.
Стоимость участия: 3990₽
Когда: завтра, 21 апреля
👉 Забронировать место на воркшопе: https://proglib.io/w/6f0e5775
📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих»
Мы написали и собрали для вас в одну подборку все 25 глав и 230 практических заданий!
🐍 Часть 1: Особенности, сферы применения, установка, онлайн IDE
🐍 Часть 2: Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
🐍 Часть 3: Типы данных: преобразование и базовые операции
🐍 Часть 4: Методы работы со строками
🐍 Часть 5: Методы работы со списками и списковыми включениями
🐍 Часть 6: Методы работы со словарями и генераторами словарей
🐍 Часть 7: Методы работы с кортежами
🐍 Часть 8: Методы работы со множествами
🐍 Часть 9: Особенности цикла for
🐍 Часть 10: Условный цикл while
🐍 Часть 11: Функции с позиционными и именованными аргументами
🐍 Часть 12: Анонимные функции
🐍 Часть 13: Рекурсивные функции
🐍 Часть 14: Функции высшего порядка, замыкания и декораторы
🐍 Часть 15: Методы работы с файлами и файловой системой
🐍 Часть 16: Регулярные выражения
🐍 Часть 17: Основы скрапинга и парсинга
🐍 Часть 18: Основы ООП – инкапсуляция и наследование
🐍 Часть 19: Основы ООП – абстракция и полиморфизм
🐍 Часть 20: Графический интерфейс на Tkinter
🐍 Часть 21: Основы разработки игр на Pygame
🐍 Часть 22: Основы работы с SQLite
🐍 Часть 23: Основы веб-разработки на Flask
🐍 Часть 24: Основы работы с NumPy
🐍 Часть 25: Основы анализа данных с Pandas
Наглядно 😆
Библиотека питониста #развлекалово
⚙️ Фишка инструмента: Pyre — типизация, которая летает
Pyre— статический анализатор типов, способный проверять миллионы строк кода за секунды. Работает инкрементально и в режиме демона, поддерживает PEP 484 и отлично вписывается в большие проекты.
🔎 Установка и настройка проекта
➡️ macOS:
brew install python3 watchman
sudo apt-get install python3 python3-pip python3-venv
brew install watchman
mkdir my_project && cd my_project
python3 -m venv ~/.venvs/venv
source ~/.venvs/venv/bin/activate
pip install pyre-check
pyre init
.pyre_configuration
и .watchmanconfig
.echo "i: int = 'string'" > test.py
pyre
Found 1 type error!
test.py:1:0 Incompatible variable type [9]: i is declared to have type `int` but is used as type `str`.
🚀 Приручи алгоритмы: из формул в код за один воркшоп
Готовы превратить сложную теорию машинного обучения в практические навыки? Тогда приходите на наш воркшоп, который пройдет 21 апреля.
Что вас ждет на воркшопе:
🟢 Работа с реальными данными — никаких учебных датасетов, только то, что встречается в настоящих проектах.
🟢Снижение размерности с PCA — научитесь выделять главное из информационного шума.
🟢Случайный лес vs градиентный бустинг — разберемся, в чём ключевое различие и когда какой алгоритм эффективнее.
🟢Мастерство гиперпараметров — освоите тонкую настройку моделей для максимальной точности.
На нашем воркшопе вы не просто слушаете — вы делаете сами! Вы будете писать код на Python, применять популярные библиотеки и сразу видеть результат своей работы.
А самое ценное: каждый участник получит персональный code review от Марии Горденко — инженера-программиста, старшего преподавателя НИУ ВШЭ, руководителя магистратуры от ГК Самолет и Альфа-Банка.
⏰ Когда: 21 апреля
💸Стоимость: всего 3990₽
Только сегодня, до конца дня: 10 мест по промокоду kulich → 2 990 ₽.
➡️ Записаться на воркшоп: https://proglib.io/w/6f0e5775
😆 Будем честны, все мы хоть раз были на YouTube-канале индуса, который обещал сделать сайт за 5 минут, но 40 минут объяснял, как установить Python.
😱 А между прочим, скоро мы можем потерять такой контент.
Нейронки теперь могут менять акценты на лету, так что в следующий раз, возможно, ваш индийский преподаватель станет Джейсоном из Лондона 💂!
Если хотите, пробуйте сами. Заходите на Krisp — 60 минут в день бесплатно.
Библиотека питониста #развлекалово
🧠⚡️👟 Странные, но эффективные лайфхаки для продуктивности
Иногда самые действенные способы повысить продуктивность звучат как полный бред. Но это работает! Пользователи Reddit делятся своими «тупо-звучащими-но-реально-помогающими» секретами, которые помогут тебе наконец-то перестать прокрастинировать и начать делать дела.
ТОП-советы от пользователей Reddit — в нашей статье.
🐸 Библиотека программиста
Главное — успеть убежать 🤣
Библиотека питониста #междусобойчик
🎯 Команда дня: `@overload` в Python@overload
из модуля typing
позволяет указать несколько сигнатур для одной функции. Это особенно полезно, когда возвращаемый тип зависит от аргументов — и вы хотите, чтобы типизация отражала это поведение.
Пример:
from typing import Literal, overload
@overload
def transform(data: str, mode: Literal["split"]) -> list[str]: ...
@overload
def transform(data: str, mode: Literal["upper"]) -> str: ...
def transform(data: str, mode: Literal["split", "upper"]) -> list[str] | str:
return data.split() if mode == "split" else data.upper()
transform(..., "split")
→ list[str]
transform(..., "upper")
→ str
append()
у строки или .lower()
у списка@overload
def get_user(id: int = ..., username: None = None) -> User: ...
@overload
def get_user(id: None = None, username: str = ...) -> User: ...
def get_user(id: int | None = None, username: str | None = None) -> User: ...
get_user(id=1)
get_user(username="John")
get_user(id=1, username="John")
— не соответствует ни одной сигнатуреLiteral
позволяет ограничить значения аргументов строками:def set_color(color: Literal["red", "blue", "green"]) -> None: ...
😡 Лучшие материалы по Python в одной подборке
Собрали топовые материалы, которые наши подписчики сохраняют чаще всего.
Эту подборку мы будем регулярно пополнять, поэтому сохраняйте тонну пользы, чтобы не потерять!
1. uv — новый стандарт в управлении Python-проектами и пакетами
2. Бесплатный курс по фулстек-разработке — реальность
3. Интерактивная карта Python‑пакетов PyPI
4. Устали от хаоса в JSON?
5. Автоматизация с Python: от рутинных задач до DevOps
6. Poetry vs UV: какой менеджер пакетов лучше для Python?
7. Чистый код на Python
🎬 Все декораторы в Python — за 9 минут
Краткий, но ёмкий видео-гид, в котором вы узнаете, как работают декораторы, зачем они нужны и как применять их для написания более чистого и эффективного кода.
💡 Что вы узнаете:
— Что такое декораторы в Python
— Как использовать @staticmethod
, @classmethod
и @property
— Как создавать собственные декораторы, чтобы упростить архитектуру кода
📌 Основные моменты:
0:00 — Введение и понятие декораторов
3:11 — Все встроенные декораторы Python
🔗 Ссылка на видео: https://clc.to/dBNl5Q
Библиотека питониста #буст
Когда сроки горят, а разработчиков не хватает
Нехватка квалифицированных разработчиков, срывы дедлайнов и перегруз команды — эти проблемы знакомы большинству IT-руководителей. В условиях растущей конкуренции найти баланс между качеством реализации, сроками и бюджетом становится всё сложнее, особенно когда проект требует редких компетенций или быстрого масштабирования.
Решение проблемы — задействовать дополнительные ресурсы на аутсорсе или аутстаффе. Например, обратиться в Proglib. Да-да, мы запустили свою студию веб-разработки!
Что мы предлагаем:
• Опытные специалисты для аутстаффа (frontend, backend, DevOps, UI/UX, PM, BA)
• Полноценная разработка проектов под ключ
• Гибкое масштабирование команды под потребности клиента
• Прозрачная коммуникация и регулярная отчетность
Для каждого проекта формируется индивидуальная команда, исходя из конкретных потребностей заказчика.
Заполните форму, чтобы ускорить свою разработку 👉 https://forms.yandex.ru/u/67e548a4eb614622efa0bcb2/
💻 Как ускорить выполнение запросов к базе данных в Django
Когда Django-запросы вытягивают из базы больше данных, чем нужно, это тормозит работу приложения. Чтобы ускорить выполнение и уменьшить нагрузку, можно использовать методы:
〰️ defer()
— откладывает загрузку указанных полей до их фактического использования
〰️ only()
— загружает только указанные поля, остальные — по запросу
〰️ exclude()
— фильтрует объекты, исключая ненужные
В статье — практические примеры на базе веб-приложения для агентства недвижимости: как применять эти методы, чтобы получать только нужные данные и ускорять запросы.
🔗 Подробнее в статье: https://proglib.io/sh/2vagPRorTU
Библиотека питониста
⌨️ Топ-вакансий для питонистов за неделю
Senior Python Developer (Blockchain) — от 3500 до 4500 $, удалённо
Руководитель группы разработки Python — от 350 000 до 550 000 ₽, удалённо
Python developer (DDI) — от 250 000 ₽, гибрид (Москва)
Tech Lead Python — от 350 000 ₽, удалённо
Junior Python Developer — от 130 000 до 300 000 ₽, удалённо
➡️ Еще больше топовых вакансий — в нашем канале Python jobs
Библиотека питониста
📱 Python новости
🚀 Релизы и инструменты:
— Шесть релизов Python за один день — весна 2025-го врывается с размахом
— TARIFF — «величайший» Python-пакет
🧠 Профессия и карьера:
— Python остаётся топ-навыком для AI-вакансий — по данным AI Index 2025
🧪 Разработка и производительность:
— Примитивный компилятор на Python — учебный проект с нуля
— CPU-кеш и Python — может ли кеширование ускорить ваш код
🌐 Django и веб:
— F(), Func() и никаких циклов — как Django пишет SQL под капотом
— Django Simple Deploy + DevOps — обсуждаем в подкасте
— Go vs Python для веб-скрейпинга — сравнение инструментов
🎥 Видео:
— Data Engineering + AI/LLMs — видео-урок по загрузке данных
Библиотека питониста #свежак
Самые догадливые, пишите ответ в комментах 👇
Небольшая подсказка — это термин относится к Python.
Прячем ответы под спойлер, чтобы не спалить остальным.
Библиотека питониста #междусобойчик
❓ Зачем дата-сайентисту дисперсия
Дисперсия — ключевой статистический показатель, который помогает оценить изменчивость данных. Для дата-сайентистов она критична при:
👉 Оценке и интерпретации результатов моделей
👉 Понимании поведения алгоритмов машинного обучения
👉 Снижении ошибок при построении предсказаний
В этой статье разберём, как правильно использовать дисперсию в Data Science и как она влияет на работу алгоритмов, например, в модели Random Forest.
👉 Читайте, чтобы понять, как измерять и учитывать дисперсию: https://proglib.io/sh/GDKYJQdAI2
Библиотека дата-сайентиста
🖥 Чтение или эффективность: что важнее при написании кода
Один из наших подписчиков поднял интересный и часто обсуждаемый вопрос среди разработчиков: что важнее — читаемость или эффективность кода?
⬇️ Он поделился несколькими примерами, где приходится выбирать между читаемым и более оптимизированным кодом.
1️⃣ Проверка на нечётность
Простой способ:
return n % 2 == 1
return bool(1 & n)
if len(my_string) == 0:
if not my_string:
if element in my_list:
try:
my_list.index(element)
except ValueError:
pass
💰 Промпт, который поможет построить карьеру Python-разработчику
Хочешь не просто писать код, а расти как специалист и двигаться к роли, о которой мечтаешь?
Вот промпт, который поможет составить персональный план роста — с проектами, нетворкингом и прокачкой скиллов.
✍️ Промпт:
Help me create a personalized career growth plan based on my current role as a [your role] and my long-term goal to become a [desired position].
Identify key skills I need to develop, high-impact projects I should pursue, and networking strategies to connect with industry leaders.
Include creative ways to showcase my expertise (e.g. speaking opportunities, internal initiatives) and suggest a 90-day action plan to track progress.
Bonus: Recommend 2-3 people I should learn from and what I can study from their career paths.
✔️ Лучшие практики импорта модулей в Python
В этом посте рассмотрим лучшие практики импорта модулей в Python, чтобы код был чистым и эффективным.
1⃣ Используйте явный импорт
Старайтесь использовать явный импорт, а не from module import *
, чтобы избежать конфликтов имен и улучшить читаемость кода.
# Плохо
from math import *
# Хорошо
from math import sqrt, pi
# Стандартные библиотеки
import os
import sys
# Третьи библиотеки
import requests
import numpy as np
# Локальные модули
from my_module import my_function
# Плохо
from .module import function
# Хорошо
from my_project.module import function
# Плохо
# module_a.py
from module_b import function_b
# module_b.py
from module_a import function_a
# Хорошо
# module_a.py
def function_a():
from module_b import function_b
...
# Плохо
import math
# Хорошо
from math import sqrt
# Хорошо
import numpy as np
import pandas as pd
# Плохо
import numpy
import pandas
try:
import some_library
except ImportError:
print("Не удалось импортировать some_library. Убедитесь, что она установлена.")