Python Community
12.4K subscribers
1.34K photos
76 videos
15 files
839 links
Python Community RU - СНГ сообщество Python-разработчиков

Чат канала: @python_community_chat

Сотрудничество: @cyberJohnny и @Sergey_bzd

РКН реестр:
https://knd.gov.ru/license?id=67847dd98e552d6b54a511ed&registryType=bloggersPermission
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Microsoft выпустила Visual Studio 2026 - крупнейшее обновление IDE за последние годы.

🔹 300+ новых функций и почти 5000 исправлений ошибок
🔹 Интеграция с GitHub Copilot стала глубже: теперь он помогает в анализе, рефакторинге и генерации кода
🔹 Редизайн интерфейса — 11 новых цветовых тем, улучшенная навигация и читаемость
🔹 Производительность выросла: количество зависаний интерфейса снизилось на 50 %
🔹 Более 4000 расширений от Visual Studio 2022 полностью совместимы с новой версией

Самое время обновиться - новая версия ощутимо быстрее и умнее.

https://visualstudio.microsoft.com/downloads/

@csharp_ci

@Python_Community_ru
This media is not supported in your browser
VIEW IN TELEGRAM
🖥СОВЕТ ДЛЯ PYTHON ASYNCIO

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

Решение - вручную ограничить размер буфера транспорта через `set write buffer limits и всегда ждать writer.drain. Тогда при медленном клиенте корутины просто «замрут» в drain(), а не раздуют памяиь.
Подписывайся, больше фишек каждый день !


пример контролируемой по памяти передачи данных

import asyncio

async def handle(reader, writer):
writer.transport.set_write_buffer_limits(high=500_000, low=200_000)

while True:
writer.write(b"x" * 65536)
await writer.drain() # остановит корутину, если клиент не успевает

async def main():
server = await asyncio.start_server(handle, "0.0.0.0", 8888)
async with server:
await server.serve_forever()

asyncio.run(main())

@Python_Community_ru
Кризис в диджитал

Все говорят о кризисе: бюджеты режут, рынок сжимается, конкуренция растёт. В digital это ощущается сильнее всего – давление на эффективность и сроки стало нормой. Но паника ничего не меняет.

Мы видим ситуацию иначе. Когда рынок штормит, выигрывают не те, у кого больше ресурсов, а те, кто умеет быстро перестраиваться, усиливать процессы и работать точнее.

Мы знаем, как проходить спад: что оптимизировать, что автоматизировать, какие метрики реально важны, что помогает удерживать клиентов, а что – только создаёт иллюзию контроля.

В итоге несколько авторов digital-каналов решили объединиться и собрать всё полезное в одну папку — «Документы для тех, кто в digital»

🔴 Там 30 файлов, которые помогают выстроить управление, аналитику и внутренние процессы:

– Мотивация сотрудников в IT,

– Контроль сроков диджитал-проекта,

– Шаблон CSI,

– Фреймворк для проведения исследований через ИИ,

– Как создать продающее КП.

📂 Ссылка на папку: https://t.iss.one/addlist/mUVeZHwtrzc0NWYy

А чтобы добавить немного азарта — среди подписавшихся разыграют:

🥇 iPhone Air;
🥈 Яндекс Станцию Лайт 2;
🥉 HUAWEI Freebuds 5.

Как участвовать:

1. Подпишись на папку: https://t.iss.one/addlist/mUVeZHwtrzc0NWYy
2. Подтверди участие в боте

🗓 Итоги — 25 ноября.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
💡 Qwen-Image-Edit получил полезное обновление.

Лаборатория eigen ai labs выпустила новую LoRA под названием Eigen-Banana. Она ориентирована на быстрые и точные правки изображений по текстовым подсказкам. Работает на высоких скоростях и хорошо понимает как английские, так и китайские запросы.

Важно: лицензия разрешает только некоммерческое использование.

Ссылка: https://huggingface.co/eigen-ai-labs/eigen-banana-qwen-image-edit

@Python_Community_ru
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ ПРИЁМ ДЛЯ ГЛАДКОЙ ПЕРЕДАЧИ ДАННЫХ В ASYNCIO

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

Приём - отправлять данные кусками и вставлять короткий await asyncio sleep после каждого drain(): это отдаёт управление циклу, даёт шанс другим корутинам и предотвращает монополизацию CPU.

Полезно в высоконагруженных стримерах.


простой «мягкий» троттлинг передачи данных

import asyncio

CHUNK = 32_000

async def send_smooth(writer, data: bytes):
for i in range(0, len(data), CHUNK):
writer.write(data[i:i+CHUNK])
await writer.drain()
await asyncio.sleep(0) # отдаём управление циклу

async def handle(reader, writer):
payload = b"x" * 5_000_000
await send_smooth(writer, payload)
writer.close()
await writer.wait_closed()

async def main():
srv = await asyncio.start_server(handle, "0.0.0.0", 8888)
async with srv:
await srv.serve_forever()

asyncio.run(main())

@Python_Community_ru
👍1
Microsoft выкатили **amplifier** - новую экспериментальную платформу для сборки AI-инструментов без лишнего кода.

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

Чем хорош инструмент:
- позволяет быстро превращать повторяющиеся задачи в автономные AI-процессы;
- помогает строить «агентов» с ролями — исследователь, критик, исполнитель;
- снижает порог входа: достаточно описать логику, а не писать всю реализацию.


Это пока исследовательский проект, но потенциал — большой.

👉 Репозиторий: https://github.com/microsoft/amplifier

@Python_Community_ru
🔥2👍1
🧩 Удобная библиотека для логирования с контекстом

Unilogging упрощает процесс логирования в Python-приложениях, используя Dependency Injection для управления контекстом логов. Это позволяет легко отслеживать события, связанные с конкретными запросами, без необходимости передавать данные через все уровни приложения.

🚀Основные моменты:
- Логирование с использованием контекста для упрощения отслеживания запросов.
- Поддержка Dependency Injection для гибкости и удобства.
- Минимизация дублирования кода при передаче данных логирования.
- Интеграция с FastAPI и другими фреймворками.

📌 GitHub: https://github.com/goduni/unilogging

@Python_Community_ru
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Хитрый трюк по работе со статикой

Если заранее посчитать ETag для статических файлов, сервер сможет мгновенно отвечать 304 Not Modified без чтения с диска. Это резко ускоряет отдачу статики на Python.



import os, hashlib
from http.server import SimpleHTTPRequestHandler, HTTPServer

STATIC = "static"
etag = {f: hashlib.md5(open(os.path.join(STATIC, f),"rb").read()).hexdigest()
for f in os.listdir(STATIC)}

class H(SimpleHTTPRequestHandler):
def end_headers(self):
name = self.path.lstrip("/")
if name in etag:
self.send_header("ETag", etag[name])
super().end_headers()

HTTPServer(("0.0.0.0", 8000), H).serve_forever()

@Python_Community_ru
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Очистка python кода!

Чтобы сильно упростить очистку Python-кода, вынеси мелкие предикаты, фильтры и маппинги в именованные функции. Это делает пайплайны короче, уменьшает вложенность и ускоряет отладку. Такой приём особенно полезен, когда список операций растёт и становится нечитаемым. Подписывайся, больше фишек каждый день !


def is_valid(user):
return user.get("active") and user.get("role") != "banned"

def normalize(user):
user["name"] = user["name"].strip().title()
return user

def enrich(user):
user["score"] = user.get("score", 0) + 10
return user

users = [... ] # внешний источник

cleaned = [enrich(normalize(u)) for u in users if is_valid(u)]

print(cleaned)

@Python_Community_ru
👍3
✔️ CPython может получить обязательную зависимость от Rust к версии Python 3.17.

Эмма Смит и Кирилл Подопригора из core-team Python опубликовали предварительное предложение (Pre-PEP), в котором описывается план постепенного внедрения Rust в кодовую базу CPython.
На первом этапе Rust хотят использовать для необязательных модулей стандартной библиотеки, находящихся в каталоге Modules/.

Дальше — больше: если эксперимент окажется успешным, то к выходу Python 3.17 Rust может стать обязательной сборочной зависимостью. Это позволит улучшить безопасность, производительность и надёжность низкоуровневых частей интерпретатора.

Подробнее: https://peps.python.org/pep-0011/

@Python_Community_ru
👍2
🚀 django-keel - мощный стартовый шаблон для Django-проектов

💡 Что это такое
Готовый современный каркас для Django-приложений, который позволяет запускать новый проект за минуты — с правильной архитектурой, CI, Docker и продуманной конфигурацией.

🔥 Что внутри
- Поддержка Python 3.12+ и Django 5.2+
- Несколько видов проектов: SaaS, API-backend, web-app, internal tools
- Docker + Docker Compose
- Настроенные линтеры, тесты, coverage и GitHub Actions
- 12-factor конфигурация, разделённые settings (dev/test/prod)
- Варианты API: DRF или GraphQL
- Поддержка фронта: Next.js или HTMX + Tailwind

🎯 Почему стоит использовать
- Экономит недели рутинной настройки
- Даёт единообразную и поддерживаемую архитектуру
- Ускоряет разработку MVP, внутренних сервисов и SaaS-продуктов

🛠 Быстрый старт

copier copy gh:CuriousLearner/django-keel my-project


Репозиторий: https://github.com/CuriousLearner/django-keel

@Python_Community_ru
🔥3
🚀 GigaChat Ultra & Lightning — новые MoE-модели от Сбера

💡 Что это такое
Две открытые (https://ria.ru/20251120/sber-2056388219.html) модели нового поколения, обученные с нуля — без чужих весов. Созданы, чтобы ускорять разработку, уменьшать рутину и быть удобным напарником для разработчиков.

🔥 Что внутри
- Ultra: 702B параметров, контекст до 131k, стабильная работа экспертов
- Lightning: 10B параметров, контекст до 256k, лёгкая и быстрая
- Генерация нескольких токенов одновременно
- Экономия памяти, оптимизация KV-кеша
- Совместимость с Hugging Face, vLLM и SGLang

🎯 Почему стоит использовать
- Сбер снимает часть технических забот, чтобы сосредоточиться на экспериментах
- Ускоряет локальное прототипирование и работу с AI-помощниками
- Подходит для масштабных решений и небольших проектов

@Python_Community_ru
👍1
🚀 myfy - модульный Python-фреймворк с фронтендом «из коробки»

Зачем он нужен: FastAPI - идеален для API, но без нормального фронта.

myfy берёт лучшее из FastAPI и добавляет полноценную модульность, DI и встроенный UI.

🔥 Главное
- Модульная архитектура с жизненным циклом (`start/stop`)
- Type-based DI без скрытой магии
- Фронтенд сразу из коробки:
Jinja2 + DaisyUI + Tailwind + Vite + HMR
Можно делать UI без React/Vue, идеально для внутренних тулов
- Чистая структура проекта, минимум бойлерплейта

🚀 Быстрый старт

pip install myfy
myfy init
myfy frontend init
myfy run


https://github.com/psincraian/myfy

@Python_Community_ru
🔥2
🔥 10 однострочных Python-функций, которые экономят время каждый день

Держи небольшой набор из 10 функций-однострочников, которые полезно просто закинуть в свой utils.py.
Они помогают быстро работать со списками, файлами, JSON, статистикой и частотами, без лишнего шума в коде.
Скопируй блок целиком и используй нужные функции по месту.


from pathlib import Path
from collections import Counter
import json, statistics as stats

chunks = lambda it, n: [it[i:i + n] for i in range(0, len(it), n)]

flatten = lambda lst: [x for sub in lst for x in sub]

unique = lambda seq: list(dict.fromkeys(seq))

sliding = lambda it, n: [it[i:i + n] for i in range(len(it) - n + 1)]

freqs = lambda seq: Counter(seq)

read_text = lambda p: Path(p).read_text(encoding="utf-8")

write_text = lambda p, text: Path(p).write_text(text, encoding="utf-8")

read_json = lambda p: json.loads(Path(p).read_text(encoding="utf-8"))

write_json = lambda p, obj: Path(p).write_text(json.dumps(obj, ensure_ascii=False, indent=2), encoding="utf-8")

mean_std = lambda xs: (stats.mean(xs), stats.pstdev(xs))

@Python_Community_ru
🔥1
🧵 CPython 3.15 делает распаковку данных намного быстрее

В новой версии CPython улучшили производительность декомпрессии:

- Zstandard (zstd) распаковывается на 25–30% быстрее
- zlib — на 10–15% быстрее, если размер данных больше 1 MiB

Такого ускорения добились за счёт более эффективной работы с выходными буферами во время распаковки.

Подробнее: emmatyping.dev/decompression-is-up-to-30-faster-in-cpython-315.html

@Python_Community_ru
🔥3
Cursor мощно прокачался — релизнулась версия 2.1, которая еще быстрее находит баги, делает ревью кода, пишет и оптимизирует программы.

• Разрабы внедрили кнопку «Find issues» — агент автоматически правит баги, делает ревью и подсвечивает проблемы в боковой панели. Да, все СРАЗУ и без нескольких промптов.
• Поиск ускорили в разы — теперь он работает на базе векторов и шерстит даже массивную кодовую базу за секунды.
• Улучшили режим планирования — агент будет задавать еще больше уточняющих вопросов, когда ты утверждаете задачу. Отвечать нужно в интерактивном режиме.

И да, сейчас на Cursor Pro есть скидка — реально приятная. Вместо 22 тысяч — 7000 рублей!
Так что если думали — это тот самый момент «пока недорого».
Купить можно на сайте 👉 по ссылке (https://cursorpro.ru/?utm_source=tg&utm_medium=post&utm_campaign=pr1)
Или можно купить на авито напрямую у продавца по ссылке (https://cursorpro.ru/avito?utm_source=tg&utm_medium=post&utm_campaign=pr1)

@Python_Community_ru
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Коварная ловушка с замыканиями в Python

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

Частая ошибка - внутри цикла создавать функции-лямбды, которые «помнят» одно и то же финальное значение переменной, а не значение на каждой итерации. В итоге весь список функций ведёт себя одинаково. Чтобы избежать ловушки, фиксируйте значение через аргумент по умолчанию или используйте functools.partial.



funcs = []

for i in range(5):
funcs.append(lambda x=i: x) # фиксируем i как значение по умолчанию

print([f() for f in funcs]) # [0, 1, 2, 3, 4]

@Python_Community_ru
👍1