20070
Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/xZOL
pdfrename | Массовое именование PDF-файлов
Если вы генерируете файлы.pdf скопом и нуждаетесь в их автоименовании, библиотека:
— распознает документ;
— подаст его ChatGPT (OpenAI API);
— сформирует осмысленный заголовок.
Цена: бесплатно, но за токены придется платить
Репозиторий проекта
#инструмент
@zen_of_python
Давно хотелось сделать такую RPG: Средневековый герой верхом на огромном волшебном питоне выполняет миссии и спасает людей от изнуряющей работы, потому что единственный из всех знает программирование...
Еще бы заодно воспроизвести всю цепочку открытий от электричества до современного hardware мог, а то ноутбук быстро сядет 🤓
#кек
@zen_of_python
1к 🙏 и у вас буду выходные без инцидентов
@ithumor
Это оберег от новых задач. Пускай рабочие чаты пополняются сообщениями, уведомления о них на майские сегодня можно заглушить.
❤️, если заглушил все рабочие уведомления
🎃, если вынужден гасить внезапные пожары на выходных
@zen_of_python
Пока весна цветёт в коммитах мая,
Твой Python-код без лишних точек с запятой.
С Первомаем, кодер, Поздравляю!
Пусть в выходные твой канбан несет покой.
@zen_of_python
League-Smile-Therapy | Как часто компьютерный игрок улыбается
Один любопытный реддитор создал приложение на Python + OpenCV, которое буквально смотрит, улыбаетесь ли вы во время игры в League of Legends. А что, там какие-то плюшки за позитивный настрой полагаются?
#кек
@zen_of_python
except* | Зачем нужна звездочка?
Когда мы работаем с asyncio, может случиться так, что несколько задач выбрасывают ошибки одновременно.
До Python 3.11 ловилась только первая ошибка. Остальные — либо игнорировались, либо приходилось мучиться с обработкой.
С Python 3.11 ввели ExceptionGroup. Это контейнер для нескольких исключений.
ExceptionGroup(
[ValueError("Ошибка 1"), TypeError("Ошибка 2")]
)
import asyncio
async def task1():
raise ValueError("Ошибка в task1")
async def task2():
raise TypeError("Ошибка в task2")
async def main():
try: # ловит ExceptionGroup
await asyncio.gather(task1(), task2()) # запускает обе задачи параллельно
except* ValueError as e: # перехватывает все ValueError из группы
for err in e.exceptions:
print(f"Перехвачено ValueError: {err}")
except* TypeError as e: # перехватывает все TypeError
for err in e.exceptions:
print(f"Перехвачено TypeError: {err}")
asyncio.run(main())
'''
Вывод:
Перехвачено ValueError: Ошибка в task1
Перехвачено TypeError: Ошибка в task2
'''
Вопрос подписчика
Задает @Ilia_O_P:
«Есть у кого-нибудь пример метакласса, который запоминал бы изменения в объектах дочерних классов и мог их откатить, при запросе?»
NB! Пожалуйста, будьте взаимовежливы. Однажды и вам помогут в этой рубрике.
#обсуждение
@zen_of_python
copier | Ctrl + C, Ctrl + V для шаблонов проекта
Если вам тоже надоело настраивать проекты с нуля каждый раз, то этот инструмент как раз автоматизирует такую рутинную задачу. Принимает как локальные пути до темплейтов, так и ссылки GitHub.
❤️ — пускай у подписчиков аптайм будет 99,99%
🌚 — хочу, чтобы тот самый подходящий репозиторий с GitHub всегда был с фиксированными версиями зависимостей
Цена: бесплатно
Библиотека на PyPi
#инструмент
@zen_of_python
Когда вставил в код, написанный нейросетью, свой кусок:
Читать полностью…
Python — это уже целая религия, однако Гвидо ван Россум в ней точно отказался от роли кумира.
#кек
@zen_of_python
Вселенная пушит тебе знаки…
Стоит ли сегодня деплоить на прод, начинать новый проект или лучше затаиться и почистить кэш? Вытащи карту из нашей цифровой колоды и получи мудрый совет судьбы перед новым релизом, багфиксом или планёркой.
Реклама
Hot Module Reloading для вашего проекта на WSGI
Тоже надоело перезапускать бота в командной строке при каждом изменении кода?
Традиционные инструменты, такие как uvicorn --reload или gunicorn --reload, при любом изменении кода полностью перезапускают сервер. Это может занимать целую вечность, если проект крупный.
Одна команда реализовала такую перезагрузку «на месте» с помощью Dependency Graph. При изменении файла система определяет все связанные с ним модули и обновляет только их.
Используя карту зависимостей и отслеживание порядка импорта, удалось сократить время обновления с 4,8 секунды до 6 миллисекунд.
✍️ — бывало, подбешивало
🗿 — ну и пускай перезагружается с нуля
#факт
@zen_of_python
Вопрос подписчика
Задает @kirillkasparyants1:
«обработка файлов с расширением отличный от .txt»
От админа: если вас интересуют форматы вроде .docx, то почти для каждого из них на PyPi уже есть либа: python-docx, python-pdf и проч.
NB! Пожалуйста, будьте взаимовежливы. Однажды и вам помогут в этой рубрике.
#обсуждение
@zen_of_python
Pattern Matching в Python 3.13
Помимо No GIL и билдов для iOS-приложений, в новой версии были внесены улучшения в структурное сопоставление с образцом (Pattern Matching). Одним из ключевых нововведений стало более интуитивное сопоставление по атрибутам объектов.
Ранее для сопоставления объектов по их атрибутам требовалось использовать дополнительные методы или свойства, что усложняло код. С введением новой функциональности в Python 3.13 стало возможным напрямую сопоставлять объекты по их атрибутам в конструкции match-case.
match user:
case User(name="Admin", role=AdminRole()) as admin:
return admin.get_permissions()
case User(name=name, role="editor") if is_senior(name):
return editor_permissions()
case _:
return default_permissions()
user является экземпляром класса User с атрибутом name, равным "Admin", и атрибутом role, являющимся экземпляром AdminRole, то он присваивается переменной admin, и вызывается метод get_permissions();user — это User с ролью "editor" и именем, удовлетворяющим условию is_senior(name), то возвращаются разрешения редактора.
pyfonts | Любой шрифт Google Fonts в Matplotlib
Если вы тоже выступаете за «дизайнеризацию» ноутбуков и в целом хотите унифицировать графики и текст вокруг них, этот тул позволит подключить любое из 1800+ начертаний за пару строк кода.
Цена: бесплатно
Репозиторий проекта
#инструмент
@zen_of_python
Вежливость города нейросети берет.
Восстание машин ему точно не страшно.
Редакция Tproger желает питонистам хорошенько почиллить на этих майских праздниках. Также помянем коллег из поддержки 24 / 7 (оставим им хотя бы цифровой шашлык):
©-🐍-🤓-😂-🐍-🕸-🔖->
| |
| |
|🔥 🔥 🔥🔥🔥🔥 🔥|
@zen_of_python
PEP 770 принят: «Улучшая измеримость пакетов ...»
11 апреля принята к разработке стандартизированный метод SBOM (англ. Software Bill-of-Materials). Этот документ будет располагаться в .dist-info/sboms и:
решать проблему «фантомных зависимостей». Многие зависимости содержат встроенные компоненты на других языках (например, C, C++, Rust), которые не отражаются в стандартных метаданных. Это затрудняет анализ состава программного обеспечения и может привести к пропущенным уязвимостям.
Предложение не ограничивается одним форматом SBOM. В зависимости от потребностей разработчиков предлагают две альтернативы.
#факт
@zen_of_python
H3LLO․CLOUD вконец упоролись и дают две вируталки на год БЕСПЛАТНО
• Две виртуалки с 2 ядрами.
• 4 Гб оперативки DDR5.
• 50 Гб объектного хранилища.
• 40 Гб сетевого диска.
• Белый статический IP (конечно, v4).
• И даже балансировщик нагрузки!
Это первое подобное предложение на российском рынке.
Они просто знают, что стоит вам попробовать настоящее облако с двумя машинами — и вас будет ломать возвращаться к убогим хостингам.
Две машины — это уже отказоустойчивая система. Можно запустить реальный проект: блог на 10к+ посещений, небольшой магазин или корпоративный сайт. И всё это без покупки железа и головной боли с настройкой.
Базы данных тоже включены, так что можно забыть о мучениях с Postgres, Mongo и прочим добром.
Когда вы почувствуете, как легко и приятно с этим всем работать, — всё, приехали, вы не сможете от этого отказаться.
А ещё скоро H3LLO․CLOUD добавят бесплатный Kubernetes — 3 месяца простенького кластера и месяц полноценного.
Единственное условие: чтобы получить все плюшки, включая белый IP, нужно пополнить счёт на 5000 ₽. Это не плата, это защита от криптомайнеров и торрент-раздавальщиков. Деньги останутся на вашем счету.
«А что если я создам 100 аккаунтов и буду пользоваться бесплатно вечно?» Ну, попробуйте. У H3LLO․CLOUD есть специальный человек Серёжа, который каждое утро приходит, пьёт кофе и ищет таких умников. А ещё у H3LLO․CLOUD есть нейросеть, но про неё Серёже не говорят — пусть думает, что незаменим.
Короче, заходите, тестируйте, ломайте. H3LLO․CLOUD готовы!
А чтобы первыми узнать о подобных предложениях — подписывайтесь на канал! Это тоже бесплатно.
Реклама. Рекламодатель: ООО «ХЕЛОУ», ИНН 9704228431, erid:2W5zFHCRnw2
zev | Помнит CLI-команды за вас
Утилита на базе OpenAI, которая поймет ваш запрос «на простом человеческом» и в ответ вернет команду, с учетом операционки, естественно. Создатели рекомендуют ollama, так тул вообще станет условно бесплатным.
Цена: бесплатно
Репозиторий проекта
#инструмент
@zen_of_python
Еще бы, ведь спустя столько лет наконец появились время и навык для того самого пет-проекта
#кек
@zen_of_python
Ну или по классике — закоммитил .env
#кек
@zen_of_python
Вопросы подписчиков
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте;
#вопросы_новичков
@zen_of_python
Вопрос подписчика
Задает @FieryDruid:
«Генерировал ли кто-нибудь индексы для моделей sqlalchemy в рантайме?
Так сложилось, что индексов надо достаточно много и генерируются они по определенному принципу, из-за чего вручную их описывать в модели очень не удобно.
Написали генератор, который за нас заполняет __tableargs__ модели
Но из-за такого генератора появилось странное поведение alembic
Теперь, при каждой новой миграции, он в upgrade сначала удаляет все старые индексы, а потом добавляет их же (первая генерация нормальная, но каждая последующая сопровождается такими вот артефактами)
Может кто сталкивался или есть мысли из-за чего такое поведение может быть? Порядок генерируется один и тот же, нейминги, типы и т.д тоже».
#обсуждение
@zen_of_python
Как я сделал Telegram-кружки из обычного видео с помощью Python, ffmpeg и магии
Автор статьи — подписчик Tproger, описал, как с помощью Python и FFmpeg можно преобразовать видео в Telegram-кружочки. Хороший способ познакомиться с питонической обработкой видео и Telegram Bot API.
#основы
@zen_of_python
CUDA Python
CUDA — платформа параллельных вычислений, с ней мы можем запускать свой код на графических процессорах.
NVIDIA очнулась, и теперь предоставляет нативную поддержку Python для этой экосистемы. Ранее для запуска использовались C / C++ или сторонние обёртки.
Теперь Python — так называемый язык первого класса в CUDA. Для специалистов в области машинного обучения это означает ускорение вычислений на GPU.
#факт
@zen_of_python
try-except «укоротят»
Недавно приняли PEP 758, и там решили убрать скобочки при перечислении типов ошибок в try-except:except (ExceptionA, ExceptionB, ExceptionC):
try:
...
except ExceptionA, ExceptionB, ExceptionC:
...