Python/ django
61.1K subscribers
2.16K photos
87 videos
48 files
2.89K links
по всем вопросам @haarrp

@itchannels_telegram - 🔥 все ит-каналы

@ai_machinelearning_big_data -ML

@ArtificialIntelligencedl -AI

@datascienceiot - 📚

@pythonlbooks

РКН: clck.ru/3FmxmM
加入频道
🐧 Pynguin — генератор юнит-тестов для Python. Инструмент автоматически создаёт тесты для Python-кода, экономя время разработчиков и при этом адаптирован под особенности динамической типизации Python.

Проект пока находится в стадии исследования и требует осторожности — он исполняет тестируемый код, поэтому разработчики рекомендуют использовать изолированные среды вроде Docker. Установка через pip install pynguin, минимальная конфигурация требует указания пути к проекту и модулям для тестирования.

🤖 GitHub

@pythonl
🔥116👍4😢1🤩1
Хотите обрабатывать тексты в несколько кликов?
 
Освойте регулярные выражения в новом бесплатном курсе Академии Selectel.
 
Вы научитесь:
🔹 моментально извлекать данные из гигабайтов текста,
🔹 валидировать формы любой сложности,
🔹 работать с кириллицей без сломанных \b,
🔹 решать задачи с помощью lookarounds и именованных групп.
 
Курс будет полезен как новичкам, так и опытным специалистам, которые хотят прокачаться в работе со скриптами и редакторами.
 
Начните обучение прямо сейчас

Реклама. АО «Селектел», ИНН 7810962785, ERID: 2VtzqxE8kx8
4
🐍 Python Gotcha: как правильно логировать необработанные исключения

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

Пример кода:

import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.FileHandler("app.log")
handler.setFormatter(logging.Formatter("%(asctime)s %(name)s %(levelname)s %(message)s"))
logger.addHandler(handler)

def divide(a, b):
return a / b

def main():
logger.info("Start")
logger.info(divide(10, 0)) # ZeroDivisionError
logger.info("End")

if __name__ == "__main__":
main()


📄 В логе:



2025-07-24 12:00:00 __main__ INFO Start


А сам ZeroDivisionError — только в консоли. Лог молчит.

Решение — использовать sys.excepthook:


import sys

def handle_uncaught_exception(exc_type, exc_value, exc_traceback):
logger.critical("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))

sys.excepthook = handle_uncaught_exception


Теперь, если произойдёт ошибка, она попадёт в лог:



CRITICAL Uncaught exception
Traceback (most recent call last):
...
ZeroDivisionError: division by zero


📌 Вывод:
— Необработанные исключения не попадут в лог, если явно не подключить sys.excepthook
— Это особенно важно в продакшене: лог покажет, где и почему всё сломалось
— Просто и надёжно

🔗 Подробнее

@pythonl
11👍5🔥5
🐍 Продвинутый трюк в Python: свой `with` без классов

Хочешь выполнять код до и после блока with, но не писать громоздкий класс с __enter__ и __exit__? Используй @contextmanager из contextlib:


from contextlib import contextmanager
import time

@contextmanager
def timer(label="Block"):
start = time.time()
print(f"[{label}] Start")
try:
yield
finally:
end = time.time()
print(f"[{label}] End — elapsed: {end - start:.3f}s")

# Пример использования
with timer("Download step"):
time.sleep(1.2)


📌 До yield — код до with
📌 После yield — код после with

🔥 Это мощный способ:

- логировать действия,

- временно менять окружение (stdout, переменные, режимы),

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

@pythonl
9🔥7👍4
📦 Гайд: “The Step-by-Step Guide to Python Packaging Tools 2025”

Python-инфраструктура сильно изменилась.

Выбор между pip, poetry, uv, hatch, pdm и др. — это уже не просто "pip install", а стратегическое решение.

В этом гайде сравниваются 6 ключевых инструментов, каждый со своими сильными и слабыми сторонами:

1️⃣ uv — самый быстрый и универсальный (написан на Rust)
До 100× быстрее pip
Объединяет pip, virtualenv и pip-tools
Поддержка PyPI-паблишинга и Python-менеджмента
📌 Выбор для CI/CD и monorepo-проектов

2️⃣ Poetry 2 — стандарт для библиотек и модульных приложений
Поддержка semantic versioning, lock-файлов, плагинов
Отлично подходит для open source
📌 Идеален для reproducible builds и PyPI

3️⃣ Hatch — “Cargo для Python”
Поддержка матриц окружений, monorepo, хуков
Интеграция с uv для скорости
📌 Выбор для сложных enterprise-проектов и тестовых фреймворков

4️⃣ PDM — стандартизированный менеджер без virtualenv
Поддержка PEP 582 (__pypackages__), PEP 621
Изоляция без виртуалок, удобен для прототипов
📌 Подходит для rapid dev и экспериментальных сборок

5️⃣ Pipenv — простой интерфейс для приложений
Pipfile, auto-venv, чистый CLI
📌 Хорош для небольших проектов и начинающих

6️⃣ pip — классика
Совместим везде, гибкий
Нет lock-файлов, окружений, требует внешних тулов
📌 Решение для легаси-проектов или скриптов

💡 Выводы:

uv — лучший выбор для скорости, CI и автоматизации
Poetry — стандарт для библиотек, особенно с open source
Hatch — для сложных проектов и продвинутых пайплайнов
PDM — для быстрой разработки и современных стандартов
Pipenv — простой, но морально устарел
pip — базовый минимум, но требует ручной сборки обвязки

Если ты:
🔹 Собираешь ML‑пайплайн → смотри в сторону uv + Hatch
🔹 Работаешь над библиотекой → Poetry 2 будет логичным выбором
🔹 Строишь монорепу или сложный фреймворк → Hatch + workspace
🔹 Пишешь простые скрипты или MVP → подойдёт PDM или Pipenv

🔗 Полный гайд

@pythonl
9🔥6👍4😢1
This media is not supported in your browser
VIEW IN TELEGRAM
🧹 ObjectClear — инструмент для удаления объектов с изображений с помощью ИИ

Что умеет:
🖼 Загружаешь изображение
🎯 Выделяешь объект, который хочешь убрать
Модель автоматически удаляет его и восстанавливает фон

Под капотом:
— Segment Anything (SAM) от Meta для выделения объекта
— Inpaint-Anything для генерации фона
— Поддержка работы в браузере (Gradio UI)

Можно запускать локально. Всё open-source.

📎 GitHub: https://github.com/zjx0101/ObjectClear

@pythonl
🔥115👍5
⚡️ Почему лучшие разработчики всегда на шаг впереди?

Потому что они знают, где брать настоящие инсайд!
Оставь “программирование в вакууме” в прошлом, выбирай свой стек — подпишись и погружайся в поток идей, лайфхаков и знаний, которые не найдёшь в открытом доступе.

ИИ: t.me/ai_machinelearning_big_data
Python: t.me/python_job_interview
Linux: t.me/linuxacademiya
Devops: t.me/DevOPSitsec
Базы данных: t.me/sqlhub
Мл собес t.me/machinelearning_interview
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
МЛ: t.me/machinelearning_ru
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_ci
Java: t.me/java_library
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Golang: t.me/Golang_google
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://yangx.top/gamedev
Физика: t.me/fizmat
SQL: t.me/databases_tg

Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://yangx.top/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://yangx.top/addlist/mzMMG3RPZhY2M2Iy

🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno

🖥 Chatgpt для кода в тг: @Chatgpturbobot -

📕Ит-книги: https://yangx.top/addlist/BkskQciUW_FhNjEy
💼ИТ-вакансии t.me/addlist/_zyy_jQ_QUsyM2Vi

Подпишись, чтобы всегда знать, куда двигаться дальше!
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3🔥1
🔥 Нашёл 100% open-source AI-агента для задач в разработке ПО!

ByteDance выпустили Trae Agent — LLM-агент для автоматизации задач в области программной инженерии.

Планирование и использование инструментов из коробки
Умеет рефакторить, дебажить, разбираться в коде
Полностью автономный
Абсолютно открытый код

Отличная база, если вы строите что-то с AI.

git clone https://github.com/bytedance/trae-agent.git
cd trae-agent
uv venv
uv sync --all-extras


https://github.com/bytedance/trae-agent

@pythonl
🔥86👍3
E-CUP возвращается. Реальные данные. Масштабные проекты. Большие призы

Решайте ML-задачи в стиле Ozon Tech. Девять победителей разделят призовой фонд соревнования — 7 200 000 рублей 🔥
Тест-драйв работы в e-com бигтехе стартует здесь.

🗓 Регистрация: https://cnrlink.com/ecup25pythondjango
💻 Формат участия: онлайн
👥 Команда: от 1 до 5 человек
🎯 Для кого: Data Scientists, ML-специалисты, аналитики данных, дата-инженеры, специалисты Big Data и разработчики, которые интересуются ML/DS.

Что вас ждёт:
🔹 Работа над проектом для миллионов пользователей на основе данных от ведущего e-com в России.
🔹 Обмен опытом с экспертами Ozon Tech.
🔹 Эксклюзивный мерч для победителей и подарки для самых активных участников.
🔹 Питчинг — 13 сентября на конференции E-CODE. Ozon Tech предоставит финалистам билеты и оплатит поездку.

Три трека E-CUP:
1️⃣ Рекомендации: предсказание следующей покупки пользователя
2️⃣ Логистика: автопланирование курьеров
3️⃣ Контроль качества: автоматическое выявление поддельных товаров

Регистрация на платформе Codenrock: https://cnrlink.com/ecup25pythondjango
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2
🖥 Контекстный перехват stdout — как легко отключить или сохранить print

💡 Хотите, чтобы print() не мешал логике и при этом легко отключался или сохранялся в файл?

Вместо того чтобы комментировать все print() в проде, подмените стандартный вывод через контекстный менеджер — и легко направляйте вывод в файл, /dev/null или даже буфер для последующей обработки.

Это особенно полезно при отладке в прод-среде или при генерации логов без сторонних библиотек.


import sys
from contextlib import contextmanager
from io import StringIO
import os

@contextmanager
def capture_stdout(to_file=None, suppress=False):
original_stdout = sys.stdout
try:
if suppress:
sys.stdout = open(os.devnull, 'w')
elif to_file:
sys.stdout = open(to_file, 'w')
else:
buffer = StringIO()
sys.stdout = buffer
yield sys.stdout
finally:
sys.stdout.close() if sys.stdout not in (original_stdout, sys.__stdout__) else None
sys.stdout = original_stdout

# Пример использования:
with capture_stdout(suppress=True):
print("Этого вы не увидите")

with capture_stdout(to_file="output.log"):
print("А это уйдёт в файл")

with capture_stdout() as captured:
print("Это записано во внутренний буфер")

print("Буфер содержит:", captured.getvalue().strip())


@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41🔥1😁1