Python for Devs
1.16K subscribers
50 photos
19 videos
68 links
По сотрудничеству пишите в личные сообщения канала.
Download Telegram
🫡 Еженедельный дайджест №2

Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!

Статьи:
Zen of Python: философия языка
Как победить циклические импорты в Python простым способом
Неудачные эксперименты с Vibe Coding на Python
Как мы освободили 20 ГБ в PostgreSQL без удаления данных
Какой Python-фреймворк выбрать: Django, Flask или FastAPI?

Посты-коротыши:
Пасхалка в Python: антигравитация
PEP 750: t-строки — новый уровень форматирования в Python!
PythonHero 👑 Великодушный пожизненный диктатор
Нововведение, которое изменило Python

Опросы:
Какой Python-фреймворк вы предпочитаете для веб-разработки?

Самый популярный комментарий этой недели – комментарий к статье "Как мы освободили 20 ГБ в PostgreSQL без удаления данных" от пользователя @Azrak:

"...как можно освободить десятки гигабайт места в PostgreSQL без удаления данных и индексов ... удаляем неиспользуемые индексы" 🙂


@python_for_devs
👍4🔥32
Меньше магии, больше кода: мой способ писать Django views

Команда Python for Devs подготовила перевод статьи о том, как автор выбирает способ написания представлений в Django.

Он считает, что обобщённые классовые представления (CBV) скрывают слишком много магии, усложняют чтение кода и отладку. Вместо них он использует базовый View, чтобы сохранять контроль, но при этом избегать громоздких if в функциях.

А вы как пишете свои представления — на функциях, CBV или тоже предпочитаете «чистый» View?

📚 Подробности на Хабр: https://habr.com/ru/articles/946734/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32🔥1
🔧 Целостность данных JSON-колонок в PostgreSQL

JSON всё чаще используют в реляционных базах данных — он позволяет хранить гибкие структуры и избавляет от избыточных связей между таблицами. Но вместе с удобством появляется риск: данные могут потерять предсказуемость.

Если не контролировать содержимое JSON-колонок, туда легко попадут неожиданные значения: числа вместо строк, объекты вместо массивов. В итоге приложение может «сломаться» на ровном месте.

В MySQL проверка JSON поддерживается из коробки. В PostgreSQL для этого есть расширение, которое позволяет валидировать данные по JSON-схеме прямо на уровне БД.

Пример: у нас есть таблица products с колонкой attributes, где хранятся характеристики товара.


CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
attributes JSON NOT NULL DEFAULT '{}'
);


Мы ожидаем, что поле tags внутри этого JSON будет массивом строк. Однако без строгой проверки на уровне базы данных нет гарантии, что кто-то не запишет туда числа, объекты или вообще что-то неподходящее.

Чтобы сохранить гибкость JSON и одновременно обеспечить строгую структуру данных, можно использовать валидацию JSON-схемы на уровне базы данных. Для этого нужно добавить constraint, который автоматически проверит соответствие содержимого JSON определенной схеме при каждой операции вставки или обновления.

Пример для PostgreSQL:


ALTER TABLE products ADD CONSTRAINT data_is_valid CHECK(
validate_json_schema(
'{
"type": "object",
"properties": {
"tags": {
"type": "array",
"items": { "type": "string" }
}
},
"additionalProperties": false
}',
attributes
)
);


Теперь, попытка вставить данные с невалидным значение для tags приведёт к ошибке:


INSERT INTO products (..., attributes) VALUES
(..., '{}'), -- Пустой объект, допускается
(..., '{"tags": []}'), -- Пустой массив строк
(..., '{"tags": ["test"]}'); -- Массив со строкой
-- Результат: Операция успешна

INSERT INTO products (..., attributes) VALUES
(..., '{"tags": [2]}'); -- Массив с числом вместо строки
-- Ошибка: Нарушен constraint
👍6🔥52
🔝 Топ-6 Python-библиотек для визуализации

Matplotlib, seaborn, Plotly, Altair, Pygal и Bokeh — у каждой свои сильные и слабые стороны: от академических статичных графиков до интерактивных дашбордов для бизнеса.

Выбираем самую подходящую для различных кейсов.

📚 Подробности на Хабр: https://habr.com/ru/articles/946750/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥32
🏆 Python разрывает конкурентов — 26% рейтинга!

Python уверенно №1 в TIOBE Index с огромным отрывом: 25.98% (+5.81% за год). Это почти втрое больше, чем у ближайшего конкурента C++ (8.8%).

Интересно, что ещё в 2010 Python был на 7-м месте, а в 2000 — аж на 23-м. Сегодня это де-факто язык №1 для науки о данных, автоматизации, AI и обучения программированию.

За счёт простого синтаксиса и тонны библиотек Python остаётся идеальным входом в программирование — от скриптов до ML-моделей.

Источник.

#news@python_for_devs
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩4👍3🔥21
🫡 Django Templates: всё, что вам нужно знать

Команда Python for Devs подготовила перевод большого туторила по Django Templates.

В статье подробно разбирается, как устроен язык шаблонов Django, чем он отличается от Jinja, как правильно наследовать шаблоны и организовать структуру проекта.

Если вы хотите сделать свои Django-приложения более чистыми, поддерживаемыми и быстрыми — этот материал для вас.

📚 Подробности на Хабр: https://habr.com/ru/articles/946762/
3👍3🔥2
🫡 Еженедельный дайджест №3

Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!

Меньше магии, больше кода: мой способ писать Django views
Целостность данных JSON-колонок в PostgreSQL
Топ-6 Python-библиотек для визуализации
Python разрывает конкурентов — 26% рейтинга!
Django Templates: всё, что вам нужно знать

Самый популярный комментарий этой недели – комментарий к статье "Меньше магии, больше кода: мой способ писать Django views" от пользователя @danilovmy:

Забавная статья. Автор не хочет запоминать другие «магические» методы и по-прежнему использует магию, такую как get_object_or_404, redirect или что-то еще...


@python_for_devs
4👍3🔥3
😲 Нововведения Python 3.14: автодополнение и подсветка синтаксиса в REPL

В новой статье узнайте про одно из нововведений Python 3.14, которое упрощает работу с Python за пределами IDE.

Теперь автодополнение и подсветка синтаксиса работают прямо в терминале, а цветовую тему можно настроить под себя.

📚 Подробности на Хабр: https://habr.com/ru/articles/948852/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍21🤩1
🧩 PEP 804: как связать внешние зависимости с вашим пакетным миром

Если вы собираете Python-пакет с нативными расширениями или завязками на системные библиотеки (zlib, OpenBLAS, компиляторы, ImageMagick и т. п.), вы точно сталкивались с болью: «pip ругнулся, а что именно надо установить — непонятно».

PEP 804 закрывает эту дыру: теперь инструменты понимают внешние зависимости из вашего pyproject.toml (в формате DepURL из PEP 725) и умеют карточно их с пакетами целевой экосистемы (Ubuntu, Fedora, Homebrew, conda-forge, Nix, Spack и т. д.). В идеале — даже показывать готовую команду установки.

Сценарий: вы ставите пакет, он не собирается из-за отсутствия g++ и zlib. Вместо «гугли сам» вы видите аккуратный список для вашей системы: sudo apt install g++ zlib1g zlib1g-dev. А если вы предпочитаете conda — получите mamba install cxx-compiler zlib.

Когда внешние зависимости не формализованы, ломается все подряд:
🟣 Сборка падает: у разных дистрибутивов разные имена одних и тех же пакетов (zlib1g-dev, zlib-devel, libz), а инструкции в README устаревают быстрее, чем хотелось бы.
🟣 Документация зарастает мхом: сложно поддерживать в актуальном состоянии команды для 5–10 экосистем одновременно.
🟣 CI/релизы с задержками: «оно у меня работало» превращается в рулетку — особенно с чужим Docker-образом, или отличной от вашей OS.
🟣 Анализ зависимостей страдает: внешние требования не видны инструментам, отчего ломаются деревья зависимостей и предсказуемость обновлений.

PEP 804 нацелен искоренить эти проблемы. Вместо «надеемся, что пользователь догадается» — центральный реестр имен + прозрачные сопоставления для конкретных экосистем, поддерживаемые самими экосистемами.

Ниже — минимальный, но рабочий «скелет», который можно взять и внедрить сегодня.

Шаг 1. Опишите внешние зависимости в pyproject.toml

Раздел [external] — это ваш чек-лист для системных/не-PyPI зависимостей. Идентификаторы — это DepURL из PEP 725: dep:generic/... для конкретных библиотек и dep:virtual/... для «ролей» (например, компилятор C++).


[build-system]
build-backend = "mesonpy"
requires = ["meson-python>=0.13.1", "pybind11>=2.10.4"]

[external]
# Что нужно для сборки (toolchain, заголовки)
build-requires = [
"dep:virtual/compiler/cxx",
]

# Что нужно для линковки/исполнения
host-requires = [
"dep:generic/zlib",
]


Что это дает: любой инструмент, понимающий PEP 804/725, может на входе получить DepURL и на выходе — список пакетов для вашей ОС/менеджера пакетов.

Шаг 2. Валидируйте DepURL-ы локально

Подтяните тул, который умеет читать [external], валидировать записи и предлагать каноничные идентификаторы. Пример с условным pyproject-external:

python -m pyproject_external show --validate .

Если вы промахнулись (написали dep:virtual/compiler/cpp вместо cxx), получите подсказку вида:

Did you mean 'dep:virtual/compiler/cxx'?

Шаг 3. Получайте команды установки для вашей платформы

То, ради чего все затевалось. Покажите маппинг под «авто-определенную» экосистему (например, Ubuntu + apt) или явно выберите нужную (conda-forge + mamba/pixi):


# Показать внешние зависимости как DepURL
python -m pyproject_external show .

# Показать уже сопоставленные имена пакетов
python -m pyproject_external show --output=mapped .

# Сгенерировать команду установки
python -m pyproject_external show --output=command .
# Пример вывода:
# sudo apt install --yes g++ zlib1g zlib1g-dev python3


Подробнее: PEP 804 — An external dependency registry and name mapping mechanism: peps.python.org/pep-0804/.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍32
⚡️ Самый быстрый способ загрузить 32 000 строк в PostgreSQL с помощью Python

Команда Python for Devs подготовила перевод статьи о том, как найти самый быстрый способ загрузки данных в PostgreSQL с помощью Python.

Автор пошагово сравнил разные методы — от построчных вставок до COPY с потоковой генерацией CSV — и показал, как ускорить процесс более чем в 250 раз при нулевом потреблении памяти.

📚 Подробности на Хабр: https://habr.com/ru/articles/948854/
👍63🔥3
🙏 Git bisect: быстрый способ найти баг

Вы когда-нибудь ловили баг в проекте, который «ещё вчера работал»?

Коммитов — целая гора, глазами не найти. Тут и выручает git bisect.

Это штука, которая делает бинарный поиск по истории. Вы указываете, где баг точно есть (git bisect bad HEAD), и где его точно не было (git bisect good abc123).

Дальше Git сам переключает вас на середину между "плохим" и "хорошим" кодом и говорит: «проверь».

Вы смотрите: баг есть → git bisect bad, бага нет → git bisect good.

И так несколько раз, пока Git не ткнёт пальцем в конкретный коммит: вот тут всё сломалось.

Фишка в том, что даже если между good и bad 100 коммитов, руками проверять придётся не сто, а всего 6–7. Логарифмы в действии 🙂

А если повезло, и баг можно проверить скриптом (например, тест падает с кодом 1) — вообще красота:


git bisect run ./test_bug.sh


Git сам пройдётся по истории и принесёт виновника на блюдечке.

Так что если в следующий раз придётся охотиться за багом — не спешите листать git log. Пусть git bisect сделает грязную работу 😉
👍83🔥3
🐢 Почему Python такой медленный? И вот что об этом думают эксперты

На PyCon 2024 многие доклады были посвящены одной цели — сделать Python быстрее.

В статье собраны самые интересные идеи: использование статической типизации и Cython для ускорения вычислений, создание подмножеств языка вроде SPy, переписывание тяжёлых функций на C, статическая линковка расширений, immutable-объекты для обхода GIL и параллельные вычисления через субинтерпретаторы.

📚 Подробности на Хабр: https://habr.com/ru/articles/948858/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥52👍2
🔥 PostgreSQL 18: быстрее в 3 раза без переписывания SQL

На днях вышла новая версия PostgreSQL — и она серьёзно прокачала производительность и удобство работы с БД.

Новая асинхронная I/O подсистема ускоряет до 3х раз чтение данных.
Апгрейды между мажорными версиями теперь станут менее болезнеными — статистика запросов сохраняется, и база не «тупит» после обновления.
Про разработчиков тоже не забыли: виртуальные вычисляемые колонки, умные индексы со skip scan, новый uuidv7() с лучшей производительностью.
Поддержка OAuth 2.0 для аутентификации, более быстрая логическая репликация и улучшенная работа с текстом.

PostgreSQL продолжает эволюционировать. И это радует)

Release Notes на английском
Release Notes на русском
Видео-обзор на русском от Павла Лузанова
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥93👍3
🫡 Трюк, который раньше ускорял Python, теперь лишь захламляет код

Почему любимая оптимизация Python — присваивать глобальные функции локальным переменным — больше не даёт выигрыша?

CPython 3.11 стал умнее, и старый хак уже почти бессмыслен.

📚 Подробности на Хабр: https://habr.com/ru/articles/951230/
👍54🔥2
Forwarded from AI for Devs
This media is not supported in your browser
VIEW IN TELEGRAM
JetBrains встроили Claude Agent прямо в свои IDE

Claude Agent теперь живёт прямо в AI-чате IDE, а под капотом — свежевыпущенный Claude 4.5 Sonnet.

Примечательно, что это первый сторонний агент, официально встроенный в экосистему JetBrains, и он идёт в составе подписки JetBrains AI — доплат не просят. Сделан на Anthropic Agent SDK, поэтому умеет в контекст, тулы, файловые операции и даже исполнение кода. Работает через MCP: агент видит IDE как сервер инструментов, вы — просто переписываетесь в чате.

Кратко об основных возможностях:

🟣 Работа с несколькими файлами: агент показывает предложенные правки в виде диффов прямо в редакторе — удобно сравнить «до/после» и решить, принять или выкинуть.
🟣 Контроль на вашей стороне: без вашего разрешения Claude ничего не тронет — ни файл, ни консоль. Но если достаточно смелые, то можно включить Brave mode и агент пойдет заниматься своими делами без ваших апрувов
🟣 Plan mode: агент сначала опишет шаги и только потом займется реализацией.
🟣 Управление контекстом: можно подкинуть файлы, папки или даже картинки — агент станет отвечать точнее и умнее.

Источник

@ai_for_devs
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥41👏1
💸 Устаревшие версии Python обходятся компаниям в миллионы долларов

Команда Python for Devs подготовила перевод статьи о скрытых издержках использования старых версий Python.

TL;DR: 83% разработчиков застряли на Python 3.10–3.11, и это обходится компаниям в миллионы долларов ежегодно из-за лишних "облачных" затрат.

А ведь казалось бы, обновиться — проще простого.

📚 Подробности на Хабр: https://habr.com/ru/articles/951234/
👍5😱42
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Manim: питон, математика, магия

Если вам когда-то хотелось сделать презентацию, которая выглядит как видео с ютуба «3Blue1Brown», то вот ответ — Manim. Это целый движок, который превращает код в красивые ролики с графиками, фигурами и текстом.

Что умеет:
– Строить абстрактные сцены из линий, кругов и формул.
– Анимировать всё это плавно и «научно красиво».
– Легко комбинировать текст и геометрию.
– Поддерживать и простые проекты «на коленке», и масштабные лекции/курсы.

Интересно, что библиотека выросла из личного проекта блогера (Grant Sanderson aka 3Blue1Brown), а теперь её используют университеты, энтузиасты и даже стартапы для объясняющих видосов. Комьюнити активно пилит фичи, а документация и примеры выглядят уже вполне серьёзно.

Выглядит как инструмент будущего для тех, кто хочет объяснять сложное просто — и при этом не тратить полжизни в Premiere, Davinci и т.д.

Так что да, пора пробовать!

Исходный проект Manim
Manim Community (версия, поддерживаемая сообществом)
Getting Started от создателя
🔥63🤩2😱1
😢 Ржавеет экосистема Python

Два Ивана посмотрели, что же у нас произошло за последние пару лет: массовый рост количества замен pip install: PDM, Poetry и главное — UV.

Тоже самое мы видим и в линтерах и форматтерах: был blake + flake8, стал Ruff. Что объединяет все эти штуки? Конечно, скорость работы и разработка этих инструментов на Rust.

😉 СМОТРЕТЬ НА YOUTUBE
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3👏2😱1