Библиотека питониста | Python, Django, Flask
38.5K subscribers
3.14K photos
92 videos
56 files
4.84K links
Все самое полезное для питониста в одном канале.

Список наших каналов: https://t.me/proglibrary/9197

Для обратной связи: @proglibrary_feeedback_bot

По рекламе: @proglib_adv
РКН: https://gosuslugi.ru/snet/67b885cbd501cf3b2cdb5b36

#WXSSA
Download Telegram
⏱️ Справочник по Big-O в Python

Для тех, кто хочет писать не просто работающий, а эффективный код, обновился ультимативный справочник — Python Time & Space Complexity Reference.

Это детальная база данных по сложности операций для версий Python от 3.9 до 3.14.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥62👍1
Пишешь на Python? Пора становиться AI-инженером

Python — родной язык для AI, но одного знания синтаксиса уже мало. Рынок 2026 года требует умения строить отказоустойчивые агентные системы. Мы обновили курс «Разработка AI-агентов», добавив жёсткий инженерный трек.

Твой новый стек:

🔹 LangGraph & Orchestration. Внедряем Human-in-the-loop, time-travel для отладки и сложные графы состояний вместо лапши из if-else.

🔹 Advanced RAG. Промышленные пайплайны на Python: парсинг, эмбеддинги, векторные БД и улучшение поисковых запросов.

🔹 Backend-инжиниринг. Управление токенами, кэширование, роутинг запросов и предотвращение регрессий.

🔹 Production Ready. Модуль по управлению браузером, интеграция с legacy и юридические аспекты (152-ФЗ).

Стартуй сейчас!
Покупаешь курс — сразу получаешь материалы для пре-подготовки.

🎟 Промокод Agent — скидка 10 000 ₽ (до 28 февраля).

👉 Перейти к инжинирингу
👍2🥱1
💡 Библиотека algorithms: реализация классических алгоритмов на Python

Если вы занимаетесь подготовкой к техническим интервью или просто хотите глубже разобраться в структурах данных, этот репозиторий — отличная находка.

Автор собрал ключевые алгоритмы и оформил их максимально чисто: с аннотациями типов, подробными docstrings и оценкой сложности прямо в коде.

Примеры того, что есть «под капотом»:

1. Графы и поиск путей:
Реализованы основные алгоритмы: от поиска в ширину (BFS) до алгоритмов Дейкстры и Беллмана-Форда.


from algorithms.graph import dijkstra

graph = {
"s": {"a": 2, "b": 1},
"a": {"c": 8},
"b": {"d": 2},
"c": {"t": 4},
"d": {"c": 11, "t": 5},
"t": {},
}
print(dijkstra(graph, "s", "t")) # (8, ['s', 'b', 'd', 't'])



2. Динамическое программирование:
Например, классическая задача о размене монет или нахождении подпоследовательностей.

3. Структуры данных:
Binary Heap (двоичная куча), Trie (префиксное дерево), BST (бинарное дерево поиска).

Как попробовать:
Устанавливается стандартно через pip:
pip install algorithms

🔗 Github

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍112
This media is not supported in your browser
VIEW IN TELEGRAM
🛡️ pip install = взлом: почему 56% малвари не ждут импорта

Мы привыкли думать, что вредоносный код активируется в момент import malicious_lib. Но свежие данные по датасету QUT-DV25 (14 тысяч образцов) говорят об обратном: 56% пакетов исполняют полезную нагрузку прямо во время установки.

Это значит, что простого pip install достаточно, чтобы лишиться переменных окружения или получить reverse shell через скрипты setup.py или post-install.

Запускать каждый install в отдельной песочнице — ресурсозатратно. Статические сканеры (вроде Snyk или Safety) часто пасуют перед обфускацией, а агенты рантайма (Falco) обычно следят за приложением уже после деплоя, пропуская фазу сборки.

Чтобы закрыть эту дыру в безопасности цепочки поставок, появился проект KEIP. Это инструмент на базе eBPF, который встраивается в ядро Linux (LSM hooks) и контролирует процесс установки в реальном времени.

Например:
🛠 KEIP отслеживает всё дерево процессов pip.
🛠 Если setup.py или любой его дочерний процесс пытается достучаться до сервера, которого нет в белом списке (читай: любого сервера, кроме PyPI), инструмент мгновенно «убивает» всю группу процессов.

🔗 Посмотреть код на GitHub: https://clc.to/DlD3Gg

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍113
Отличная шпаргалка по Python. Она наглядно показывает, как превратить громоздкие циклы в элегантные однострочники.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
15👍9
От скриптов на коленке — к enterprise-агентам на Python

Накидать бота на LangChain за вечер может каждый. Но когда выкатываешь это в продакшн, начинаются проблемы: система зацикливается, память течёт, а API-ключи сжигают бюджет.

Мы пересобрали курс по AI-агентам для Python-разработчиков под реалии 2026 года. Это глубокий инженерный гайд, где мы учим превращать нестабильные скрипты в надёжные бэкенд-решения с жёстким контролем ресурсов.

Что мы разберём на практике:

— хардкорный RAG: обработка сырых PDF, тюнинг эмбеддингов под промышленные объёмы;
— продвинутый LangGraph: маршрутизаторы, time-travel, прерывания и human-in-the-loop;
— профилирование LLM: трассировка ошибок, логирование и динамическое переключение моделей;
— автоматизация: пишем агентов, которые сами управляют браузером и legacy-системами;
— безопасный деплой: как развернуть архитектуру без нарушения 152-ФЗ.

До 28 февраля по промокоду Agent доступна скидка 10 000 рублей.

Плюс работает акция «3 курса по цене 1» — забирайте два дополнительных направления бесплатно.

Стать AI-инженером
1
🛠 Шпаргалка: как писать тесты, которые не бесят

Главная проблема тестов — хрупкость. Это когда вы просто переименовали функцию или разбили один метод на два (не меняя логику), а тесты упали. Значит, вы тестировали детали реализации, а не поведение.

Solitary (Одиночные): Изолируем юнит, заменяя всё вокруг моками.

Минус: Тест намертво привязан к структуре кода. Изменили вызов — тест упал.
Когда юзать: Только для экстремально сложных алгоритмов с кучей граничных кейсов.

Sociable (Общительные): Тестируем юнит вместе с его реальными зависимостями (если они не лезут в БД/сеть).

Плюс: Высокая устойчивость к рефакторингу. Код внутри меняется — тест остается зеленым.
💡 Правило: Тестируй «что» делает код (результат), а не «как» (какие методы дергает).

Что и чем тестировать:
— Бизнес-логика (условия, расчеты, правила): Sociable Unit (минимум моков).
— Координация (код, который дергает БД, шлет письма, вызывает API): Интеграционный / Сервисный тест.
— Тривиальный код (простые геттеры, проброс параметров): Не тестировать отдельно. Он автоматически покроется интеграционными тестами.

Три правила «здорового» теста:
— Защита от багов: Находит ли тест реальную ошибку в логике?
— Устойчивость к рефакторингу: Могу ли я переписать код с нуля, сохранив результат, чтобы тест не упал?
— Простота поддержки: Насколько легко понять, что сломалось, без дебаггера?

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🤩1
🐍 Переходим с простых скриптов на Python к сложным AI-агентам промышленного уровня

В 2026 году мало просто вызвать openai.chat.completions. Настоящий продакшн требует управления состояниями через LangGraph и жёсткого контроля за token usage.

Мы полностью обновили курс по AI-агентам, превратив его в руководство по превращению Python-кода в стабильную бизнес-систему.

📚 В обновлённой программе:

— продвинутый LangGraph: реализация human-in-the-loop и механизмов отката состояний;
— промышленный RAG: обработка разнородных документов и оптимизация семантического поиска;
— экономика агентов: автоматическое переключение между LLM для оптимизации затрат;
— инжиниринг: логирование, трассировка и работа в рамках 152-ФЗ.

Начните подготовку сразу после оплаты — вы получите доступ к базе знаний для плавного старта.

Специальные условия до 28 февраля:

— введите промокод Agent для получения скидки 10 000 рублей**;
— участвуйте в **акции «3 курса по цене 1» — выберите два любых курса в дополнение к основному.

👉 Получить доступ к курсу и подаркам
2
PEP 747 принят: теперь мы можем типизировать сами аннотации

В мире Python-типизации долгое время была «серая зона». Если вы хотели передать в функцию класс, вы писали type[T]. Но как только дело доходило до сложных штук вроде int | str или list[int], тайп-чекеры начинали ругаться.

⚡️ Принятый PEP 747 вводит `TypeForm[T]`, и это именно то, чего не хватало библиотекам вроде Pydantic и FastAPI.

Раньше type[int] работал, потому что int — это класс. Но list[int] или int | str — это не классы, а специальные объекты типов.

Попытка передать их в функцию с аннотацией type[T] выдавала ошибку в Mypy или Pyright. Разработчикам приходилось лепить Any, убивая всю пользу от статической проверки.

Теперь мы можем явно сказать: «Эта функция принимает форму типа»:

from typing import TypeForm

def trycast[T](target_type: TypeForm[T], value: object) -> T | None:
...

# Теперь это валидный код для тайп-чекера:
trycast(list[int], ["1", "2"]) # Вернет тип list[int] | None
trycast(int | str, 42) # Вернет тип int | str | None



Что это дает на практике:
1️⃣ Идеальное автодополнение: IDE будет точно знать, что возвращает ваша функция-фабрика или парсер, даже если вы передали туда сложный Generic или Union.
2️⃣ Безопасность библиотек: Авторы инструментов для сериализации и валидации смогут выкинуть «костыли» и сделать API максимально прозрачным.
3️⃣ Меньше `Any`: Теперь можно типизировать практически всё, что в Python считается валидной аннотацией.

Фишка появится в Python 3.15, но через typing_extensions её можно будет использовать гораздо раньше.

🔗 Подробности: https://clc.to/kX2xMg

А вы часто сталкивались с тем, что `type[T]` не хватало для ваших задач? Как выкручивались — через `Any` или просто игнорировали ошибки?

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52
📚Напоминаем про наш полный курс «Самоучитель по 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
👍4👏1
📱 Python новости за последние 7 дней

PEP 747 принят — теперь можно типизировать сами аннотации
Типизация выходит на новый уровень: теперь можно описывать типы… для типов. Python всё увереннее движется в сторону статического анализа, и граница между «динамичным» и «строго типизированным» языком продолжает размываться.

Perl и R возвращаются, Python теряет 19% популярности?
Громкий заголовок, но паниковать рано. Рейтинги любят колебания, а экосистема Python по-прежнему гигантская. Хотя немного здоровой конкуренции языку точно не повредит.

LEGB и область видимости — неочевидные грабли
Local, Enclosing, Global, Built-in — правило простое, а баги из-за него иногда очень нет. Хороший разбор с примерами.

mmap в Python — быстрый I/O через отображение в память
Отличный инструмент для работы с большими файлами и бинарными форматами.

Шаблонные строки в Python 3.14
Больше контроля над интерполяцией данных — меньше сюрпризов в runtime.

ООП в Python за одну статью
Компактный, но системный разбор от базового класса до архитектурных принципов.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42
⚡️ uv обошел Poetry по загрузкам

Это официально: согласно свежей статистике загрузок с PyPI, инструмент uv от команды Astral (авторов Ruff) обогнал Poetry.

Если вы всё еще используете Poetry, вот почему весь мир переходит на uv:

1️⃣ Безумная скорость: uv написан на Rust. Там, где Poetry тратит 10–15 секунд на разрешение зависимостей, uv справляется за 0.5 секунды. Разница не в процентах, а в десятки раз.

2️⃣ Всё в одном: uv заменяет собой целую пачку инструментов: pip, poetry, pyenv, pipx и virtualenv. Один бинарник, который умеет всё — от установки версии Python до управления воркспейсами.

3️⃣ Глобальный кэш: uv не копирует пакеты в каждый проект. Он использует хардлинки, экономя гигабайты места на диске.

4️⃣ Нативность: uv максимально следует стандартам (PEP). Он не пытается «изобрести свой велосипед», а делает стандартные инструменты лучше.

Короткий чек-лист по переходу:

Было: poetry install -> Стало: uv sync
Было: poetry add requests -> Стало: uv add requests
Было: poetry run python main.py -> Стало: uv run main.py

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍264👾4🤔1😢1
🚀 Starlette наконец-то дозрел до версии 1.0

Если вы пишете на Python, то Starlette — это «серый кардинал» вашего стека. Вы можете не использовать его напрямую, но он крутится под капотом у FastAPI, Litestar и еще десятка фреймворков.

Том Кристи создал этот проект почти 8 лет назад (в 2018-м), и всё это время мы жили на версиях 0.x. И вот, наконец, вышел 1.0.0rc1.

Дело не только в красивой цифре. В 2026 году Starlette стал критической деталью в мире ИИ.

✔️ Он — база для Python MCP SDK (Model Context Protocol). Если вы строите агентов, которые должны общаться с внешним миром, вы скорее всего используете Starlette.
✔️ 10 миллионов скачиваний в день. Это буквально фундамент современного асинхронного веба.

В новой версии разработчики вырезали всё старое и неактуальное (deprecated), что копилось годами, и зафиксировали API.

👀 Если у вас FastAPI, просто подождите — обновление прилетит само как зависимость. Если же вы используете Starlette напрямую для своих микросервисов, самое время прогнать тесты на 1.0.0rc1.

🔗 Release Notes: https://clc.to/RevWVg

А вы когда-нибудь пробовали писать на чистом Starlette без FastAPI? Или считаете, что без Pydantic-валидации в вебе делать нечего?

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥91
Media is too big
VIEW IN TELEGRAM
🎨 Ast-visualizer превращает код в карту и графики

Проект Ast-visualizer предлагает перестать гадать, где в коде «тонкие места», и начать их видеть. Инструмент анализирует AST (абстрактное синтаксическое дерево) вашего проекта и строит на его основе наглядные отчеты.

Что умеет инструмент:
🔝 Интерактивные AST-деревья: Визуализация структуры отдельных файлов с цветовой подсветкой.
🔝 Radial View: Радиальный вид дерева. Позволяет одним взглядом понять, где в файле спрятаны самые «толстые» функции.
🔝 Тепловая карта сложности: Сложные участки кода (по Мейкейбу) подсвечиваются красным прямо в дереве.
🔝 Граф зависимостей: Показывает, как файлы связаны через импорты. Незаменимая вещь для поиска круговых зависимостей.
🔝 Dashboard поддержки: Рассчитывает индекс поддерживаемости (0–100) и выдает ТОП-5 кандидатов на рефакторинг.

Большинство AST-эксплореров просто рисуют дерево одного файла. Ast-visualizer идет дальше: он интерпретирует данные, объединяет их в масштабе всего репозитория и визуализирует в разных форматах — от радиальных схем до графиков сложности по строкам.

🔗 Попробовать на своем коде: https://clc.to/yV4wag

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤩2🤔1
🌍 icu4py: правильная работа с текстом и локализацией

Если вы хоть раз делали интернационализацию (i18n) в Python, то знаете, какая это боль.

Библиотека ICU (International Components for Unicode) — это мировой стандарт (её используют Chrome, macOS и VS Code), но в Python с ней всегда было сложно: либо древний неудобный API, либо мучения с установкой системных зависимостей.


icu4py — современная библиотека-обертку, которая делает работу с Unicode приятной:

1. MessageFormat
Он сам разруливает правила множественного числа (plurals), которые в каждом языке свои:
— English: 0 files, 1 file, 5 files.
— French: 0 fichier (единственное число), 1 fichier, 2 fichiers.

С icu4py вам не нужно писать if count == 1 для каждого языка — библиотека сама знает стандарты Unicode для любой локали.

2. Boundary Analysis
Разбить текст на предложения — это не просто поиск точки. Нужно учитывать кавычки, сокращения и специфику языка.
Класс SentenceBreaker понимает контекст и не разрывает предложение на «т. д.» или внутри цитаты.


🔗 Установка: pip install icu4py
📂 GitHub: https://clc.to/KdjSUQ

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
2
За год мы провели три потока курса по ИИ-агентам, а теперь запускаем масштабное обновление!

В новом, четвёртом потоке мы учли все пожелания студентов, добавили большой блок про AgentOps и сместили фокус с базовых концепций на суровый инжиниринг. Написать пет-проект на Python легко, а вот сделать так, чтобы он не сливал бюджет на токены, не падал при нестандартных запросах и работал в проде — задача со звёздочкой.

В программе:

— практика в Jupyter: структурный вывод и типизация PydanticAI;
— профессиональная оркестрация в LangGraph и другая парадигма AutoGen;
— продвинутый RAG для продакшена и парсинг сложных документов;
— контроль экономики агентов: маршрутизация и кеширование запросов;
— развёртывание локальных опенсорс-моделей с соблюдением 152-ФЗ.

В честь старта продаж действует спецпредложение: 3 курса по цене 1 (два дополнительных курса в подарок).

Доступ к материалам для предварительной подготовки откроется сразу после оплаты.

По промокоду Agent забирайте скидку 10 000 ₽ (89 000 ₽ вместо 99 000 ₽). Успейте занять место до 28 февраля!

👉 Присоединиться к четвёртому потоку и вывести агентов в прод
1
🛠 cattrs: де-сериализация в Python

cattrs берет на себя всю грязную работу по превращению «сырых» словарей в красивые структурированные объекты и обратно. При этом ваши модели остаются чистыми — в них нет ни строчки кода, отвечающего за JSON.

Из главного:
1. Разделение ответственности: Ваши классы данных — это просто данные. Логика преобразования живет отдельно в объекте Converter.
2. Поддержка всего и вся: Из коробки работают attrs, dataclasses, TypedDict, NewType, сложные Union и даже новые Type Aliases из Python 3.12.
3. Скорость: cattrs генерирует оптимизированный код для преобразования «на лету».

💻 Пример в три строки


from attrs import define
from cattrs import structure, unstructure

@define
class User:
id: int
tags: list[str]

# Превращаем словарь в объект (Structuring)
user = structure({'id': 1, 'tags': ['python', 'cattrs']}, User)
# User(id=1, tags=['python', 'cattrs'])

# Превращаем объект обратно в словарь (Unstructuring)
dict_data = unstructure(user)



🔗 Документация

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3
🛠 Проблема: неопределенность возвращаемого типа

Представьте функцию, которая генерирует конфиг. Если действие — DELETE, она возвращает список путей (`list[str]`), в остальных случаях — словарь (`dict`).


def generate_config(context: dict, action: Action) -> dict | list[str]:
...



Для Mypy такая функция возвращает «или словарь, или список». Если вы попытаетесь использовать результат как чистый dict, тайп-чекер выдаст ошибку, даже если вы уверены в типе.

Решение: использование @overload

Декоратор @overload позволяет описать конкретные комбинации входных и выходных данных:

from typing import overload, Literal

@overload
def generate_config(context: dict, action: Literal[Action.DELETE]) -> list[str]: ...

@overload
def generate_config(context: dict, action: Literal[Action.MODIFY, Action.ADD]) -> dict: ...

def generate_config(context: dict, action: Action) -> dict | list[str]:
# Реальная логика здесь
...


📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍143