TGViewer
Channel Public Channel
Библиотека питониста | Python, Django, Flask

Библиотека питониста | Python, Django, Flask

@pyproglib

Все самое полезное для питониста в одном канале.

Учиться у нас: clc.to/6e5Csg

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

По рекламе: @tproger_sales_bot
РКН: https://gosuslugi.ru/snet/67b885cbd501cf3b2cdb5b36
Subscribers
37.3K
Photos
3.3K
Videos
105
Links
5.1K

Showing posts older than #7437 · Back to latest

Older Posts 20 shown
Post #7436 3.17K
➕ Как уменьшить память и ускорить доступ к атрибутам в Python-классах

По умолчанию каждый объект в Python хранит атрибуты в __dict__.

Гибко — да. Эффективно — не всегда:

class Point:
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z

p = Point(1, 2, 3)
print(p.__dict__)
# {'x': 1, 'y': 2, 'z': 3}


У каждого экземпляра — свой словарь. Добавили p.w = 4 — словарь вырос:

p.w = 4
print(p.__dict__)
# {'x': 1, 'y': 2, 'z': 3, 'w': 4}


🚫 Но если структура объекта фиксированная, мы платим лишнюю цену за эту гибкость.

Решение: __slots__:

class Point:
__slots__ = ('x', 'y', 'z')

def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z


Поведение меняется:

p = Point(1, 2, 3)
p.x = 10 # ок
p.w = 4 # ❌ AttributeError


И главное:

p.__dict__
# ❌ AttributeError: object has no attribute '__dict__'


Что меняется:
🔴 больше нельзя добавлять произвольные атрибуты
🔴 нет __dict__
🔴 меньше памяти на каждый объект
🔴 чуть быстрее доступ к атрибутам

Python хранит значения в компактной структуре, а не в словаре.

Используйте __slots__, если:
🔴 у вас тысячи / миллионы объектов
🔴 структура объектов фиксированная
🔴 важны память и производительность

Не стоит, если:
🔴 объект — «мешок с атрибутами»
🔴 нужна динамика и расширяемость

🔗 Статья с примерами

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

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

#буст
  • 👍 9
  • ❤ 3
Post #7435 3.56K
Создаём умного ассистента на Python: RAG vs Fine-tuning

23 января в 19:00 на открытом уроке к курсу «Разработка ИИ агентов» разберём, как научить LLM работать с вашим кодом и документацией. Обсудим, когда достаточно RAG, а когда не обойтись без дообучения модели, чтобы она понимала контекст проекта.

Занятие ведёт Игорь Стурейко, тимлид в «Газпроме» и эксперт с 20-летним опытом в ML. Игорь подготовил видеосообщение о том, как Python-разработчику перейти от написания простых скриптов к созданию сложных автономных агентов.

Технологический стек урока:

— библиотеки LangChain и LlamaIndex для оркестрации;
— векторные базы данных FAISS и Chroma;
— интеграция LLM в реальные бизнес-процессы.

📅 Когда: 23.01 в 19:00 МСК

Узнать подробности
  • 🌚 3
  • ❤ 1
Post #7432 3.55K
seapie: отладчик, где брейкпоинт — это просто `>>>`

seapie — это отладчик, который думает как человек, а не как учебник по gdb.

Без зависимостей, ставится одной командой и превращает отладку в обычный Python-REPL:

pip install seapie


Идея радикально простая:
брейкпоинт — это не клик мышкой и не спец-синтаксис, а обычный интерактивный >>>.

✔️ В seapie много подсказок, понятные ошибки и встроенная помощь, до которой можно дотянуться в любой момент.

✔️ Во-вторых, отладка через намерение, а не шаги.

seapie позволяет сказать: «остановись, когда функция вернёт None и в стеке будет myhelper» — обычным Python-выражением:

>>> !walk (_event_ == "return") and (_return_ is None) and ("myhelper" in _callstack_)


✔️ В-третьих, REPL-first по-настоящему.
Посмотреть переменную — это print(x) или просто x.
Поменять — x = None.
Команды отладчика живут рядом и не ломают мышление.

А состояние программы — это обычный словарь:

>>> _magic_
{
'_line_': 8,
'_source_': ' return round(total_with_tax, 2)',
'_path_': '/home/hirsimak/seapie/test/demo.py',
'_return_': 35.64,
'_exception_': None,
'_event_': 'return',
'_callstack_': ['<module>', 'checkout']
}


👉 Github

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

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

#буст
  • 👍 7
  • ❤ 2
Post #7431 3.75K
🪄 Самая крутая фича Python 3.14 — удалённый дебаг без подготовки

Отладка Python-приложений в Docker и Kubernetes — боль.

Новая фича Python 3.14 — sys.remote_exec() превращает всё это в почти магию.

sys.remote_exec() позволяет выполнить Python-скрипт внутри уже запущенного процесса:
🔵 без перезапуска
🔵 с полным доступом к памяти, модулям и состоянию
🔵 прямо на лету

Идеально, чтобы вколоть debugpy в живое приложение.

И собственно, debugwand — zero-prep remote debugger для Python в контейнерах:
🔵 Находит нужный pod или контейнер
🔵 Выбирает правильный Python-процесс (учитывает `uvicorn --reload`)
🔵 Инжектит debugpy через sys.remote_exec()
🔵 Сам настраивает port-forwarding
🔵 Ты просто подключаешься из VS Code / nvim / любого DAP-клиента

Подключаешься к localhost:5679 — и у тебя полноценный дебаг: breakpoints, step-by-step, inspect variables.

📱 debugwand

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

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

#буст
  • 👍 15
  • ❤ 3
Post #7430 3.55K
👇 Как правильно типизировать декораторы в Python

Декораторы — штука мощная, но для типизации долгое время были настоящим кошмаром. Кажется логичным сказать: «декоратор принимает функцию и возвращает такую же функцию». На практике mypy отвечает ошибками, потому что wrapper теряет исходную сигнатуру.

Вот как обычно пытаются сделать (и почему это ломается):

from functools import wraps
from typing import Any, Callable, TypeVar

F = TypeVar("F", bound=Callable[..., Any])

def info(func: F) -> F:
@wraps(func)
def wrapper(*args: Any, **kwargs: Any) -> Any:
print(func.__name__)
return func(*args, **kwargs)

return wrapper # mypy: incompatible return type


Типизатор видит, что wrapper — это уже другая функция с Callable[..., Any], а не тот же F.

Правильное современное решение — ParamSpec, который сохраняет параметры исходной функции:

from functools import wraps
from typing import Callable, ParamSpec, TypeVar

P = ParamSpec("P")
R = TypeVar("R")

def info(func: Callable[P, R]) -> Callable[P, R]:
@wraps(func)
def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
print(func.__name__)
print(func.__doc__)
return func(*args, **kwargs)

return wrapper


Теперь сигнатура полностью «протаскивается» через декоратор и mypy счастлив.

А в Python 3.12+ это стало ещё красивее благодаря PEP 695:

from functools import wraps
from typing import Callable

def info[**P, R](func: Callable[P, R]) -> Callable[P, R]:
@wraps(func)
def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
print(func.__name__)
print(func.__doc__)
return func(*args, **kwargs)

return wrapper


Без лишних объявлений, всё читается почти как generics в статически типизированных языках.

➡️ Подробная статья

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

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

#буст
  • ❤ 9
  • 👍 5
  • 🌚 1
Post #7427 3.9K
📱 Python новости за последние 7 дней

Python 3.15 уже здесь (alpha 5)
Вышла Python 3.15.0a5 — внепланово, но по уважительной причине: предыдущую альфу собрали не из того снапшота репозитория. Новый билд уже основан на корректной версии от 14 января 2026.

Anthropic инвестирует в безопасность Python
$1.5 млн в Python Software Foundation на два года — и не абстрактно «на развитие», а именно на безопасность экосистемы.

Парсинг сайтов на Python с BeautifulSoup
Классический стек, который до сих пор работает. Хороший вводный материал для тех, кто хочет понять, как аккуратно доставать данные, а не просто копировать чужой код.

Отладка Python-приложения в Docker из VS Code
Тот самый навык, который нужен сразу, а гуглится обычно в панике. Практичный гайд без лишней теории.

Python без Python: как запускать код где угодно
Про упаковку, окружения и способы избавиться от вечного «а у меня не запускается».

Что такое классы в Python на примере 3D-игры
Редкий случай, когда ООП объясняют не через «котиков и собачек», а через что-то реально интересное. Подойдёт и новичкам, и тем, кто хочет освежить базу.

Скрытая цена словарей Python и более безопасные альтернативы
dict — наше всё, но не всегда бесплатно. Хороший разбор, где словари начинают кусаться по памяти и поведению.

Pydantic vs Adaptix
Сравнение двух подходов к валидации и сериализации данных.

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

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

#свежак
  • 👍 7
  • ❤ 2
Post #7426 4.08K
📘 Python 3.15 уже здесь (alpha 5)

Вышла Python 3.15.0a5 — внеплановый, но важный релиз. Предыдущую альфу случайно собрали не из того снапшота репозитория, поэтому разработчики выпустили дополнительную сборку уже с корректной базой от 14 января 2026.

Что особенно интересно в ветке 3.15:

▶️ Появился новый встроенный статистический профайлер (PEP 799) — низкие накладные расходы, высокая частота семплирования и отдельный profiling-пакет в стандартной библиотеке. Это тот самый инструмент, который уже используют для реальных оптимизаций CPython и packaging.

▶️ UTF-8 теперь безоговорочный дефолт (PEP 686). Больше никаких плясок с локалями и «почему у меня всё сломалось на Windows».

▶️ Новый C API для байтов — PyBytesWriter (PEP 782). Мелочь для обычных пользователей, но большое ускорение для библиотек низкого уровня.

▶️ JIT сильно прокачали. Средний прирост производительности уже сравним с крупными релизами:
— +4–5% на x86-64 Linux
— +7–8% на macOS AArch64
Это уже не эксперимент ради галочки, а реальное ускорение интерпретатора.

▶️ Ошибки стали заметно понятнее — ещё один шаг к «Python как язык без боли».

📆 Следующая альфа (3.15.0a6) запланирована на 10 февраля.

🖥 Ссылка на новость

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

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

#буст
  • 👍 20
  • ❤ 5
  • 🤩 2
Post #7424 3.85K
«Этот манёвр будет стоить нам 51 год...»

— или потерю возможности войти в AI на выгодных условиях. Рынок Python-разработки смещается в сторону нейронок и агентов. Если вы всё ещё не разобрались в математике или архитектуре — пора начинать.

До понедельника в Proglib Academy сохраняются старые цены на всё обучение:

— Разработка ИИ-агентов
— Математика для разработки AI-моделей
— ML для старта в Data Science
— Математика для Data Science
— Специалист по ИИ
— Алгоритмы и структуры данных
— Программирование на Python
— Основы IT для непрограммистов
— Архитектуры и шаблоны проектирования

Выбрать курс

⚠️ Стоимость вырастет 19 января
  • ❤ 4
  • 😁 4
  • 🥱 2
Post #7423 3.69K
⏫ Python packaging стал в разы быстрее

Если коротко: библиотеку packaging, на которой держится pip и почти весь Python-экосистемный тулчейн, разогнали в 2–5 раз. Без переписывания на C, без магии — чистый Python, профилирование и много аккуратной инженерной работы.

Автор статьи вместе с мейнтейнерами pip разобрал самые горячие места: парсинг версий (PEP 440), SpecifierSet, маркеры, Requirement, canonicalize_name. Оказалось, что узкие места — не только regex, но и куча «мелочей»: лишние NamedTuple, повторное создание Version, singledispatch там, где нужен обычный if, генераторы вместо map, regex там, где хватит str.translate.

⏩ Самое интересное — инструменты. Работа делалась с новым статистическим профайлером Python 3.15, плюс бенчмарки гоняли по всем версиям пакетов, которые когда-либо загружались на PyPI. То есть это не синтетика, а реальный мир.

Результат:
– создание Version — до 2× быстрее
– SpecifierSet.contains — больше 2×
– SpecifierSet.filter — до 5×
– pip-резолвер создаёт в 10+ раз меньше объектов Version
–
установка пакетов и резолв зависимостей ощутимо ускоряются «бесплатно» для всех

📌 Если хочется понять как именно это сделали — статья обязательна к чтению.

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

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

#буст
  • 👍 9
  • ❤ 4
  • ❤‍🔥 1
  • 🔥 1
  • 🤩 1
Post #7422 4.42K
😎 Ansible, но на Python и без боли

pyinfra позволяет писать инфраструктурный код на обычном Python, а под капотом он превращает его в shell-команды и выполняет на серверах. Можно запускать ad-hoc команды или описывать декларативные операции. Работает по SSH, локально и с Docker-контейнерами. Масштабируется от одного сервера до тысяч — и делает это быстро.

✔️ По ощущениям это «Ansible, каким он мог бы быть», если бы сразу проектировался под производительность и удобство разработчика. Выполнение предсказуемое и быстрое, вывод stdout/stderr видно в реальном времени (дебаг наконец-то не боль), операции идемпотентны — есть diff и dry-run до применения изменений.

✔️ Отдельный плюс — это всё ещё Python. Можно тянуть любые библиотеки из экосистемы, писать свою логику без костылей и расширять систему как обычный код. Никаких агентов на серверах — только shell-доступ. Есть интеграции с Docker, Terraform, Vagrant и другими инструментами.

📱 Github

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

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

#буст
  • 👍 10
  • ❤ 3
Post #7421 4.3K
🤑 Anthropic вложился в безопасность Python

Anthropic инвестирует $1.5 млн в Python Software Foundation на ближайшие два года. Деньги пойдут не просто «на поддержку опенсорса», а конкретно на безопасность экосистемы Python.

🔛 Ключевой фокус — PyPI и supply-chain атаки. PSF планирует перейти от реактивной модели («нашли вредоносный пакет — удалили») к проактивной защите. Речь идёт о новых инструментах, которые будут автоматически анализировать все загружаемые пакеты. Для этого создаётся датасет известных malware-пакетов и система анализа их поведения.

🔛 Часть средств также пойдёт на базовые вещи, без которых Python просто не существует: развитие CPython, инфраструктура PyPI, гранты сообществу, программа Developer in Residence.

Хороший пример того, как AI-бум начинает возвращать долги опенсорсу. Одобряем?

🔗 Ссылка на новость: https://clc.to/LN2dMQ

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

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

#свежак
  • ❤ 14
  • 👍 11
  • 👏 4
  • 🤔 1
Post #7420 4.14K
Skill Tree для Python-разработчика: специализация AI Agents

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

Технологический маршрут:

— глубокое погружение в LangChain и асинхронную работу с API;

— изучение архитектуры агентов: ReAct, Plan-and-Solve и Self-Reflection;

— внедрение инструментов и интеграция с векторными БД для реализации RAG;

— оркестрация нескольких агентов через CrewAI.

На курсе «Разработка ИИ-агентов» мы учим создавать системы, которые способны самостоятельно планировать задачи и использовать инструменты.

Добавить ИИ-агентов в свой стек

Успейте купить курс до 19 января и получите ещё два курса в подарок по акции «3 в 1».

Срок действия предложения: 19 января.
  • ❤ 4
  • 😁 2
Post #7418 3.79K
➡️ В CPython ускорили reference counting

Недавно в Python quietly появился апдейт, который уменьшает накладные расходы reference counting в горячих местах. Ключевая идея — заимствование ссылок без увеличения счётчика (`LOAD_FAST_BORROW`).

Вот минимальный пример на Python:


def advance(vx, vy, steps):
x, y = 1, 1
for _ in range(steps):
x *= vx
y *= vy
return x, y


На первый взгляд — обычный цикл. Но раньше CPython на каждой итерации увеличивал и уменьшал refcount для vx и vy.

Если посмотреть байткод:

Python 3.13


LOAD_FAST vx
LOAD_FAST x
BINARY_OP *=


Python 3.15


LOAD_FAST_BORROW vx
LOAD_FAST_BORROW x
BINARY_OP *=


Разница тонкая, но важная:
LOAD_FAST → увеличивает reference count
LOAD_FAST_BORROW → берёт ссылку временно, без инкремента

Это возможно только если интерпретатор доказывает, что объект:
✔️ используется локально
✔️ не переопределяется
✔️ не «утекает» наружу

По сути, CPython делает упрощённый lifetime-анализ — очень похоже на borrow-идею из Rust, только на уровне байткода.

Итог: меньше операций с памятью, меньше давления на CPU cache и ускорение циклов без изменения Python-кода.

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

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

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

#буст
  • 👍 16
  • 🔥 4
  • ❤ 2
  • 🤔 1
Post #7417 3.87K
👨‍💻 Почему sandboxing Python внезапно стал критичным для AI-агентов

В Python до сих пор нет надёжного способа безопасно запускать недоверенный код. И это не потому, что никто не пытался — просто сам язык слишком интроспективный. Через traceback и object graph можно добраться до внутренностей интерпретатора, даже если вы «всё закрыли». Поэтому sandbox внутри Python не работает. Работает только одно — запускать Python в sandbox.

🔛 Раньше это была почти теоретическая проблема. Сейчас — нет.

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

Добавьте к этому prompt injection. LLM не понимают, где system prompt, а где вредоносная инструкция. И это не лечится «лучшими промптами». Это архитектурная особенность, а значит — вопрос безопасности.

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

Дальше — подробнее про Firecracker, gVisor, WebAssembly и почему task-level isolation может оказаться ключевой.

👉 Продолжение в статье.

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

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

#буст
  • 👍 4
  • ❤ 2
  • 😁 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →