📈 Аналітичний огляд Telegram-каналу Python Community
Канал Python Community (@python_community_ru) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 11 661 підписників, посідаючи 10 347 місце в категорії Технології та додатки та 55 018 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 11 661 підписників.
За останніми даними від 28 серпня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -74, а за останні 24 години на 0, загальне охоплення залишається високим.
Статус верифікації: Не верифікований
Рівень залученості (ER): Середній показник залученості аудиторії становить 4.77%. Протягом перших 24 годин після публікації контент зазвичай збирає 2.71% реакцій від загальної кількості підписників.
Охоплення публікацій: В середньому кожен допис отримує 556 переглядів. Протягом першої доби публікація в середньому набирає 316 переглядів.
Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 9.
Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як docker, git, github, контейнер, await.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки: “Python Community RU - СНГ сообщество Python-разработчиков
Чат канала: @python_community_chat
Сотрудничество: @cyberJohnny и @Sergey_bzd
РКН реестр:
https://knd.gov.ru/license?id=67847dd98e552d6b54a511ed®istryType=bloggersPermission”
Завдяки високій частоті оновлень (останні дані отримано 29 серпня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
\n\nФункция html() может вернуть не просто строку, а полноценный HTMLElement. Больше никакой \"грязи\" — всё чисто и типобезопасно.\n\n🔍 Работа с шаблоном\nt-строки позволяют получить доступ к содержимому:\n\ntemplate = t\"Hello {name}!\"\ntemplate.strings # (\"Hello \", \"!\")\ntemplate.values # (name,)\ntemplate.interpolations[0].format_spec # \">8\"\n\nМожно также вручную собрать шаблон:\n\nTemplate(\"Hello \", Interpolation(value=\"World\", expression=\"name\"), \"!\")\n\n🚀 Вывод:\nt\"...\" — шаг к безопасным шаблонам и типизации строк в Python. Готовься к будущему Python — безопасному по умолчанию.\n\n📌 Подробнее здесь (https://davepeck.org/2025/04/11/pythons-new-t-strings/)\n\n@Python_Community_ru","datePublished":"2025-04-23T11:09:04Z","dateModified":"2025-04-23T11:09:04Z","author":{"@type":"Organization","name":"Python Community","url":"https://telemetr.io/uk/channels/1387967118-python_community_ru","image":"https://img.tlmtr.io/c/1vVLEq/5346325335752422150?ty=x"},"publisher":{"@type":"Organization","name":"Python Community","url":"https://telemetr.io/uk/channels/1387967118-python_community_ru","image":"https://img.tlmtr.io/c/1vVLEq/5346325335752422150?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":753},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":3},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":11}]}},{"@type":"ListItem","position":18,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/uk/channels/1387967118-python_community_ru/posts/2575","url":"https://telemetr.io/uk/channels/1387967118-python_community_ru/posts/2575","mainEntityOfPage":"https://telemetr.io/uk/channels/1387967118-python_community_ru/posts/2575","headline":"🖥 ex — это инструмент для создания единого исполняемого файла .pex, который содержит всю вашу программу на P…","articleBody":"🖥 ex — это инструмент для создания единого исполняемого файла .pex, который содержит всю вашу программу на Python и её зависимости. Это самодостаточная и переносимая среда выполнения, аналогичная virtualenv, но упакованная в один файл.\n\nЗачем это нужно?\n\nПростота развертывания: чтобы установить и запустить приложение, достаточно скопировать файл app.pex и запустить его — никакой дополнительной настройки.\n\nПортируемость: один файл может включать сборки для разных платформ (Linux, macOS).\n\nИзоляция зависимостей: все библиотеки (включая C‑расширения) уже находятся внутри, поэтому конфликтов версий нет.\n\nКак пользоваться:\n\nУстанавливаем сам инструмент:\n\npip install pex\nСобираем .pex-файл:\n\npex requests -o fetch.pex --script=requests\nПосле этого fetch.pex — это готовый исполняемый файл, который при запуске сразу импортирует и запускает библиотеку requests.\n\nИнтеграция с другими сборщиками:\nСистемы вроде Pants, Buck и {py}gradle могут автоматически собирать .pex-архивы из вашего кода.\n\nЛицензия: Apache 2.0\n\n▪ GitHub: https://github.com/pex-tool/pex\n▪ Документация: https://docs.pex-tool.org/\n\n@Python_Community_ru","datePublished":"2025-04-22T11:15:20Z","dateModified":"2025-04-22T11:15:20Z","author":{"@type":"Organization","name":"Python Community","url":"https://telemetr.io/uk/channels/1387967118-python_community_ru","image":"https://img.tlmtr.io/c/1vVLEq/5346325335752422150?ty=x"},"publisher":{"@type":"Organization","name":"Python Community","url":"https://telemetr.io/uk/channels/1387967118-python_community_ru","image":"https://img.tlmtr.io/c/1vVLEq/5346325335752422150?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":855},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":10}]}},{"@type":"ListItem","position":19,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/uk/channels/1387967118-python_community_ru/posts/2574","url":"https://telemetr.io/uk/channels/1387967118-python_community_ru/posts/2574","mainEntityOfPage":"https://telemetr.io/uk/channels/1387967118-python_community_ru/posts/2574","headline":"🔥 Smolmodels (https://github.com/plexe-ai/smolmodels) — это библиотека на Python, которая позволяет создавать…","articleBody":"🔥 Smolmodels (https://github.com/plexe-ai/smolmodels) — это библиотека на Python, которая позволяет создавать модели машинного обучения, описывая их поведение на естественном языке и используя минимум кода!\n\n🔍 Основные возможности Smolmodels:\n\n🌟 Определение моделей с помощью естественного языка: Пользователь описывает намерение модели и её входные и выходные схемы на обычном языке, а библиотека автоматически выбирает метрику для оптимизации и генерирует логику для инженерии признаков, обучения модели и её оценки.\n\n🌟 Построение модели: Метод model.build() принимает набор данных (существующий или сгенерированный) и создаёт множество возможных решений модели, обучая и оценивая их для выбора наилучшего.\n\n🌟 Генерация данных и определение схемы: Библиотека может генерировать синтетические данные для обучения и тестирования, что полезно при отсутствии реальных данных или для дополнения существующих.\n\n🔐 Лицензия: Apache-2.0\n\n🖥 Github (https://github.com/plexe-ai/smolmodels)\n\n@Python_Community_ru","datePublished":"2025-04-21T11:18:11Z","dateModified":"2025-04-21T11:18:11Z","author":{"@type":"Organization","name":"Python Community","url":"https://telemetr.io/uk/channels/1387967118-python_community_ru","image":"https://img.tlmtr.io/c/1vVLEq/5346325335752422150?ty=x"},"publisher":{"@type":"Organization","name":"Python Community","url":"https://telemetr.io/uk/channels/1387967118-python_community_ru","image":"https://img.tlmtr.io/c/1vVLEq/5346325335752422150?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":1042},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":12}]}},{"@type":"ListItem","position":20,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/uk/channels/1387967118-python_community_ru/posts/2573","url":"https://telemetr.io/uk/channels/1387967118-python_community_ru/posts/2573","mainEntityOfPage":"https://telemetr.io/uk/channels/1387967118-python_community_ru/posts/2573","headline":"🐍 Как легко создать мультисловарь (Multi-dictionary) в Python Хотите, чтобы один ключ в словаре соответствова…","articleBody":"🐍 Как легко создать мультисловарь (Multi-dictionary) в Python\n\nХотите, чтобы один ключ в словаре соответствовал нескольким значениям? \n\nЭто просто!\n\nИспользуйте collections.defaultdict и встроенный list:\n\nfrom collections import defaultdict\n\nmultidict = defaultdict(list)\nmultidict[\"SW\"].append(\"Han Solo\")\nmultidict[\"SW\"].append(\"R2D2\")\n\n🔁 Теперь каждый ключ по умолчанию связан с пустым списком. А метод append добавляет новое значение в этот список.\n\nНо будьте внимательны: это немного “обман”. На самом деле словарь по-прежнему отображает один ключ → одно значение. Просто это значение — список, в который вы сами добавляете что угодно.\n\nПочему defaultdict удобен? \nПотому что вам не нужно проверять, существует ли ключ в словаре. Пустой список будет создан автоматически при первом обращении к ключу.\n\n@Python_Community_ru","datePublished":"2025-04-20T17:21:31Z","dateModified":"2025-04-20T17:21:31Z","author":{"@type":"Organization","name":"Python Community","url":"https://telemetr.io/uk/channels/1387967118-python_community_ru","image":"https://img.tlmtr.io/c/1vVLEq/5346325335752422150?ty=x"},"publisher":{"@type":"Organization","name":"Python Community","url":"https://telemetr.io/uk/channels/1387967118-python_community_ru","image":"https://img.tlmtr.io/c/1vVLEq/5346325335752422150?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":879},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":8}]}}]}
✍️ novelWriter — это простой и минималистичный редактор для писателей с поддержкой Markdown. В проекте применяется облегчённый синтаксис, основанный на Markdown, а все данные сохраняются в обычных текстовых файлах, что делает его удобным для использования с системами контроля версий.
Основное внимание инструмент уделяет простоте и стабильности. Вместо использования проприетарных форматов применяется чистый текст с метаданными в формате JSON. Редактор создан на Python с применением Qt6 и работает на всех популярных операционных системах. При этом проект открыт для всех и принимает вклады, особенно в части переводов через платформу Crowdin.
🤖 GitHub (https://github.com/vkbo/novelWriter)
@Python_Community_ru
🚀 Jittor — это фреймворк, который применяет JIT-компиляцию и мета-операторы для оптимизации вычислений непосредственно во время работы программы.
Этот проект объединяет удобство Python-интерфейса с эффективной компиляцией на C++/CUDA на низком уровне. В отличие от классических графовых методов, он динамически компилирует операции с учётом конкретной модели, что может значительно ускорить обработку сложных нейронных сетей.
🤖 GitHub (https://github.com/Jittor/jittor)
@Python_Community_ru
👣 Pyrefly — это новая высокопроизводительная система статической типизации и платформа IDE для Python, созданная командой Facebook на языке Rust.
Основное:
🔍 Продолжатель Pyre
Pyrefly разрабатывается как следующая версия типового проверяльщика Pyre от Meta, с акцентом на скорость, модульность и возможность генерации «типизированного» AST.
🚀 Написано на Rust
Большая часть кода реализована на Rust для обеспечения лучшей безопасности памяти и поддержки конкурентности. Примерно 1 % кода написано на Python и около 6 % на TypeScript (для веб-интерфейса и LSP).
⚙️ Проверка в три шага
Сбор экспортируемых элементов каждого модуля (рекурсивное разрешение всех import *)
Преобразование кода в набор «байндингов» (definitions, uses, anon) с учётом потоковых типов
Решение этих байндингов с использованием потоковых типов и phi-функций при ветвлениях и рекурсии
💡 Масштабируемость и инкрементальность
Модульно-ориентированный подход: проверка каждого модуля целиком, с возможностью параллельного запуска и меньшей сложностью по сравнению с тонкозернистыми DAG-алгоритмами.
🛠️ Интеграция и сборка
Для разработчиков на Rust: команды cargo build, cargo test
Во внутренних проектах Meta: запуск через Buck2 (buck2 run pyrefly -- check file.py)
Для PyPI: сборка wheel-пакетов через Maturin (pip install maturin && maturin build)
📡 Функции IDE и LSP
Поддерживается Language Server Protocol, обеспечивающий автодополнение, переход к определению и интерактивную отладку в редакторах.
📆 Планы
Полная замена Pyre намечена к концу 2025 года с еженедельными стабильными релизами на PyPI.
📜 Лицензия
MIT — свободное использование и участие в развитии проекта приветствуются.
🔜 Подробнее узнать и принять участие можно в репозитории на Github (https://github.com/facebook/pyrefly)
@Python_Community_ru
🖥 Задача (с подвохом). Какой результат выдаст этот код?
def extend_list(val, lst=[]):
lst.append(val)
return lst
# Первый вызов: используется список по умолчанию
list1 = extend_list(10)
# Второй вызов: передаём новый пустой список
list2 = extend_list(123, [])
# Третий вызов: снова используется список по умолчанию
list3 = extend_list('a')
print('list1 =', list1)
print('list2 =', list2)
print('list3 =', list3)
🧩 Объяснение
Как работает список по умолчанию
В объявлении функции lst=[] создаётся один список при определении функции, и он используется повторно во всех вызовах, где аргумент lst не передан.
Первый вызов
list1 = extend_list(10)
Параметр lst не передан → используется дефолтный список.
Добавляем 10.
В результате list1 становится [10].
Второй вызов
list2 = extend_list(123, [])
Передаём новый пустой список [].
В этот список добавляется 123.
В итоге list2 становится [123].
Третий вызов
list3 = extend_list('a')
Опять не передан lst → используется тот же дефолтный список, в который уже добавлен 10.
Добавляем 'a'.
Дефолтный список теперь [10, 'a'], и list3 ссылается на этот же список.
Окончательный вывод программы:
list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']
Обратите внимание, что list1 и list3 — это один и тот же дефолтный список, поэтому изменения сохраняются между вызовами.
@Python_Community_ru
🖥 TUIFIManager
Это файловый менеджер с терминальным интерфейсом, ориентированный на termux и работающий на разных платформах. Он создан для работы с проектом Uni-Curses.
📌 Как пользоваться:
Запустите tuifi в терминале или добавьте его в один из своих проектов Uni-Curses в качестве компонента, например:
from TUIFIManager import *
Установка:
sudo pip3 install tuifimanager --upgrade
pip3 install TUIFIManager --upgrade
https://github.com/GiorgosXou/TUIFIManager@Python_Community_ru
🖥 Microsoft: искусственный интеллект уже пишет до 30 % кода
На конференции LlamaCon генеральный директор Microsoft Сатья Наделла сообщил, что от 20 % до 30 % кода в репозиториях компании сейчас создается с помощью программного обеспечения, то есть с использованием искусственного интеллекта.
## Основные моменты
- Зависимость от языка программирования. Лучшие результаты генерации получаются на Python, а на C++ результаты хуже.
- Внедрение на всех этапах. Искусственный интеллект используется не только для создания чернового кода, но и для его проверки.
- Сравнение с конкурентами. Google уже заявляет о более чем 30 % кода, сгенерированного ИИ, а Meta прогнозирует до 50 % при разработке своих языковых моделей.
- Долгосрочный прогноз. По мнению технического директора Microsoft, к 2030 году доля кода, созданного ИИ, может достигнуть 95 %.
- Ограничения метрик. Пока не совсем ясно, что именно включается в понятие «ИИ-код» (автодополнение, шаблоны, бизнес-логика), поэтому эти цифры нужно воспринимать с осторожностью.
## Почему это важно
1. Ускорение процесса разработки. Рутинные задачи автоматизируются, и разработчики могут больше времени уделять архитектуре.
2. Повышение качества. Автоматическая проверка помогает быстрее находить ошибки, но требует тщательной проверки.
3. Риски безопасности. Сгенерированный код необходимо дополнительно анализировать на наличие уязвимостей.
4. Изменение ролей. Разработчики всё чаще становятся архитекторами и аудиторами, а не просто создателями кода.
@Python_Community_ru
🖥 PyXL — это аппаратный процессор, который выполняет Python-код без использования интерпретатора.
Создатель представил PyXL — уникальный процессор, способный запускать Python-программы напрямую, без необходимости в традиционном интерпретаторе или виртуальной машине.
Структура PyXL:
Python → байткод CPython → собственный набор команд для непосредственного выполнения на аппаратном уровне.
Он построен на основе стековой модели, полностью конвейерный и сохраняет динамическую типизацию Python без ограничений, связанных со статическими типами.
⏩ Тест производительности GPIO:
PyXL переключает GPIO с задержкой всего 480 наносекунд.
Для сравнения: MicroPython на Pyboard требует 14–25 микросекунд, несмотря на более высокую частоту (168 МГц против 100 МГц у PyXL).
Создатель самостоятельно разработал:
Компилятор, линкер и генератор кода,
А также аппаратную реализацию процессора.
Этот проект показывает, что возможно аппаратное исполнение Python с высокой скоростью и без ущерба для гибкости языка. Полные технические детали будут раскрыты на PyCon 2025.
🎬 Демонстрация и подробная информация: https://runpyxl.com/gpio@Python_Community_ru
Что выведет данный код при запуске на Python 3.10+ (например, 3.11)?
📌 Подсказка: Обратите внимание на порядок проверок, на то, какие атрибуты попадают в others, и на использование __match_args__.
Ответ:
Automatic mode
Mode manual, другие ключи: ['threshold', 'debug']
Низкий порог 0
Краткое пояснение:
Для первого объекта (mode="auto", threshold=10) срабатывает первый case Config(mode="auto") → Automatic mode.
Для второго (mode="manual", threshold=5, debug=True) первый не совпадает, второй с threshold.
@Python_Community_ru
Хочешь узнать, подходит ли тебе аналитика, без курсов, затрат и лишнего стресса?
🔍 Пройди кейс-тест (https://u.to/5BU9Ig) на реальной бизнес-задаче — это всё как в работе настоящего аналитика, но без необходимости иметь профильные навыки. Достаточно мышления, логики и внимательности.
⚡️ В тесте всего 10 конкретных вопросов — от постановки цели до финальных выводов. За 60 минут ты: — получишь реальные вводные от "коллег", — прокачаешь структурное мышление, — поймешь, насколько тебе подходит аналитика, — получишь обратную связь на каждый шаг.
🔥 Это бесплатный шанс попробовать новую профессию — возможно, это именно то, что тебе нужно?
👉 Нажми, чтобы начать тест прямо сейчас (https://u.to/5BU9Ig)
@Python_Community_ru
🖥 Задача: "Кэширование и ленивые вычисления в многопоточном окружении"
🔜 Условие:
Вам необходимо создать декоратор @thread_safe_cached, который:
- Кэширует результат вызова функции по её аргументам (аналогично functools.lru_cache, но реализованный самостоятельно).
- Если несколько потоков одновременно вызывают функцию с одинаковыми аргументами:
- Только один поток фактически выполняет функцию,
- Остальные ждут, пока результат будет вычислен, и получают готовый результат.
- Кэш никогда не очищается (неограниченный размер).
Ограничения:
- Решение должно работать для любых функций и аргументов (должны быть хэшируемыми).
- Нельзя использовать готовый functools.lru_cache или другие библиотеки кэширования.
- Необходимо обеспечить корректную работу в многопоточной среде без гонок данных.
---
▪️ Подсказки:
- Для кэширования можно использовать словарь с ключами по аргументам (`*args`, `**kwargs`).
- Для защиты доступа к кэшу потребуется threading.Lock.
- Для ожидания завершения вычислений другими потоками можно применять threading.Event.
- Продумайте, как отличить "результат уже посчитан" от "результат в процессе вычисления".
---
▪️ Что оценивается:
- Умение работать с многопоточностью в Python.
- Правильная организация кэширования.
- Чистота и лаконичность кода.
- Умение обрабатывать тонкие случаи, например, одновременные вызовы.
---
▪️ Разбор возможного решения:
Основная идея:
- Создать кэш cache: Dict[Key, Result].
- Одновременно создать словарь "ожиданий" in_progress: Dict[Key, threading.Event].
- Если кто-то начал вычисление значения:
- Остальные ждут Event, пока он не будет установлен.
Пример реализации:
```python
import threading
import functools
def thread_safe_cached(func):
cache = {}
in_progress = {}
lock = threading.Lock()
@functools.wraps(func)
def wrapper(*args, **kwargs):
key = (args, frozenset(kwargs.items()))
with lock:
if key in cache:
return cache[key]
if key not in in_progress:
in_progress[key] = threading.Event()
in_progress[key].clear()
creator = True
else:
creator = False
if creator:
try:
result = func(*args, **kwargs)
with lock:
cache[key] = result
finally:
in_progress[key].set()
with lock:
del in_progress[key]
return result
else:
in_progress[key].wait()
with lock:
return cache[key]
return wrapper
```
---
▪️ Пояснения к коду:
- При первом вызове для новых аргументов поток создаёт Event и начинает вычислять результат.
- Остальные потоки видят Event и вызывают wait(), пока первый поток не установит set().
- Как только результат вычислен, Event сигнализирует всем ждущим потокам, что данные готовы.
- Доступ к cache и in_progress защищён через lock для предотвращения гонок.
---
▪️ Возможные подводные камни:
- ❗ Если не удалять Event из in_progress, кэш постепенно заполнится мусором.
- ❗ Если произойдёт ошибка внутри func, необходимо всё равно освободить Event, иначе потоки будут бесконечно ждать.
- ❗ Нельзя удерживать lock во время выполнения тяжёлой функции func, иначе все потоки будут блокироваться.
---
▪️ Вопросы на собеседовании по этой задаче:
- Как изменить реализацию, чтобы кэш имел ограничение по размеру (например, максимум 1000 элементов)?
- Как адаптировать декоратор под асинхронные функции (`async def`)?
- Что произойдет, если func иногда вызывает исключения? Как кэшировать ошибки или не кэшировать их?
- Как изменить реализацию так, чтобы кэш удалял устаревшие данные через TTL (Time-To-Live)?
@Python_Community_ru
🔹 Тысяча гайдов для разработчиков в одном репозитории!
Разработчик из Твиттера собирал этот настоящий кладезь знаний целых 10 лет.
Внутри — буквально всё: от шпаргалок по горячим клавишам для ускорения работы до фундаментальных руководств по языкам программирования, веб-разработке, созданию ПО, сетям, безопасности и многому другому.
Что там есть:
📚 Инструменты для работы с CLI, GUI, вебом и локальными сетями.
📦 Списки всех актуальных фреймворков и библиотек 2025 года.
🛡 Гайды по тестированию и взлому приложений.
🔥 Шпаргалки по командной строке.
📰 Огромная подборка блогов, YouTube-каналов, онлайн-СМИ и журналов, чтобы быть в курсе и не терять хватку.
Фолиант знаний ждёт тебя!
📌 Github (https://github.com/trimstray/the-book-of-secret-knowledge?tab=readme-ov-file#manualshowtostutorials-toc)
@Python_Community_ru
👾 FlexGet — это инструмент, который превращает рутинные задачи в автоматизированные рабочие процессы: от загрузки сериалов по RSS до организации медиатеки.
Модульная архитектура проекта особенно удобна. Базовый функционал включает более 150 плагинов для интеграции с qBittorrent, Plex и другими сервисами. При этом вся логика описывается с помощью декларативного подхода.
🤖 GitHub (https://github.com/Flexget/Flexget)
@Python_Community_ru
🖥 PDF Craft — это библиотека на Python, предназначенная для преобразования PDF (в первую очередь сканированных книг) в Markdown и EPUB, с использованием локальных AI-моделей и LLM для структурирования содержимого.
🌟 Основные возможности:
- Извлечение текста и макета. Используется комбинация DocLayout-YOLO и собственных алгоритмов для обнаружения и фильтрации заголовков, колонтитулов, сносок и номеров страниц.
- Локальный OCR. Распознаёт текст на странице с помощью OnnxOCR и поддерживает ускорение на GPU (CUDA).
- Определение порядка чтения. С помощью layoutreader создаётся поток текста в том порядке, который воспринимает человек.
- Конвертация в Markdown. Генерирует .md с относительными ссылками на изображения (иллюстрации, таблицы, формулы) в папке assets.
- Конвертация в EPUB. На основе промежуточных результатов OCR передаёт данные в LLM (рекомендуется DeepSeek) для создания оглавления, глав, исправления ошибок и добавления аннотаций.
Установка и требования: Python версии 3.10 или выше (рекомендуется 3.10.16).
Используйте команды pip install pdf-craft и pip install onnxruntime==1.21.0 (или onnxruntime-gpu==1.21.0 для CUDA).
Для EPUB-конвейера необходим доступ к LLM-сервису (например, DeepSeek).
🟡 GitHub (https://github.com/oomol-lab/pdf-craft)
@Python_Community_ru
Тест из курса Django‑разработчикв OTUS 📝
Проверим основу:
1. Какая библиотека входит в стандартную библиотеку Python?
а) unitmock
б) pytest
в) unittest
г) testing
2. for‑comprehension или map/flatMap — что выбрать?
а) for‑comprehension — синтаксический сахар для map/flatMap
б) map/flatMap — когда хочется короче
в) разницы между ними нет
г) for‑comprehension используется только в императивном стиле
→ Узнать правильные ответы можно тут: https://clck.ru/3LcW3r
На курсе — Django ORM, REST, тестирование, деплой и проект под защиту. Живые занятия с практиками, фидбек по домашкам. Чтобы попасть в поток, пройдите тест до 30 апреля.
→ Пройти тестDjango ждёт тех, кто не боится работать руками.Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Как создать надёжный софт, который будет работать в любых условиях?29 апреля в 20:00 МСК на открытом вебинаре вы узнаете, как защитить свой код от проблем, которые могут возникнуть в реальной эксплуатации. Что разберём:
— Как гарантировать отказоустойчивость приложений.
— Подходы к снижению влияния сбоев и ошибок в связанных сервисах.
— Основные приемы и инструменты для создания надежных систем.
Полезно для разработчиков, QA-инженеров и архитекторов.
Открытый урок пройдет в преддверие старта курса «Python Developer. Professional». Все участники получат скидку на обучение.
Регистрируйтесь прямо сейчас:https://clck.ru/3Ld47x
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Zev 🔍
Это помощник для работы с терминалом на естественном языке.
Он помогает быстро находить нужные команды и сохранять их в избранное. Его простой и понятный интерфейс делает освоение терминала доступным даже для новичков.
pip install zev
📌 Github (https://github.com/dtnewman/zev)
@Python_Community_ru
🖥 Новая функция в Python 3.14: t-строки — типобезопасные f-строки
Python 3.14 вводит t"..." — новый синтаксис для строк, который ориентирован на безопасность типов и интеграцию с различными системами шаблонов, такими как SQL, HTML и другие.
🔹 Что такое t-строка?
t"..." — это как f"...", но:
- интерполяция ограничена и контролируется;
- поддерживается строгое соответствие шаблону;
- переменные можно передавать явно, что предотвращает SQL-инъекции и XSS.
🔸 Пример:
name = "Alice"
greeting = t"Hello, {name}!" # t-строка
Вместо немедленной подстановки, как в f"...", t"..." создает шаблон с выражениями в качестве параметров.
🔐 Зачем это нужно?
✅ Обеспечение безопасности при генерации SQL, HTML, JSON
✅ Улучшение инструментов и проверки типов (посредством статического анализа)
✅ Контроль над контекстом исполнения (нельзя просто вставить переменную как есть — её нужно передать явно)
📦 Использование:
t-строки — это первый шаг к "template string literals", как в TypeScript.
Можно использовать с функциями:
def html(template: T[str]) -> SafeHTML:
...
html(t"{user_input}")
💡 Почему это важно?
Старый код:
f"SELECT * FROM users WHERE name = '{user_name}'"
может привести к SQL-инъекциям и XSS. t-строки являются безопасной альтернативой с встроенной защитой.
🛡 Пример: безопасный HTML
template = t"{user_input}"
html_output = html(template)
# <script>alert('bad')</script>
Функция html() может вернуть не просто строку, а полноценный HTMLElement. Больше никакой "грязи" — всё чисто и типобезопасно.
🔍 Работа с шаблоном
t-строки позволяют получить доступ к содержимому:
template = t"Hello {name}!"
template.strings # ("Hello ", "!")
template.values # (name,)
template.interpolations[0].format_spec # ">8"
Можно также вручную собрать шаблон:
Template("Hello ", Interpolation(value="World", expression="name"), "!")
🚀 Вывод:
t"..." — шаг к безопасным шаблонам и типизации строк в Python. Готовься к будущему Python — безопасному по умолчанию.
📌 Подробнее здесь (https://davepeck.org/2025/04/11/pythons-new-t-strings/)
@Python_Community_ru
🖥 ex — это инструмент для создания единого исполняемого файла .pex, который содержит всю вашу программу на Python и её зависимости. Это самодостаточная и переносимая среда выполнения, аналогичная virtualenv, но упакованная в один файл.
Зачем это нужно?
Простота развертывания: чтобы установить и запустить приложение, достаточно скопировать файл app.pex и запустить его — никакой дополнительной настройки.
Портируемость: один файл может включать сборки для разных платформ (Linux, macOS).
Изоляция зависимостей: все библиотеки (включая C‑расширения) уже находятся внутри, поэтому конфликтов версий нет.
Как пользоваться:
Устанавливаем сам инструмент:
pip install pex
Собираем .pex-файл:
pex requests -o fetch.pex --script=requests
После этого fetch.pex — это готовый исполняемый файл, который при запуске сразу импортирует и запускает библиотеку requests.
Интеграция с другими сборщиками:
Системы вроде Pants, Buck и {py}gradle могут автоматически собирать .pex-архивы из вашего кода.
Лицензия: Apache 2.0
▪ GitHub: https://github.com/pex-tool/pex
▪ Документация: https://docs.pex-tool.org/@Python_Community_ru
🔥 Smolmodels (https://github.com/plexe-ai/smolmodels) — это библиотека на Python, которая позволяет создавать модели машинного обучения, описывая их поведение на естественном языке и используя минимум кода!
🔍 Основные возможности Smolmodels:
🌟 Определение моделей с помощью естественного языка: Пользователь описывает намерение модели и её входные и выходные схемы на обычном языке, а библиотека автоматически выбирает метрику для оптимизации и генерирует логику для инженерии признаков, обучения модели и её оценки.
🌟 Построение модели: Метод model.build() принимает набор данных (существующий или сгенерированный) и создаёт множество возможных решений модели, обучая и оценивая их для выбора наилучшего.
🌟 Генерация данных и определение схемы: Библиотека может генерировать синтетические данные для обучения и тестирования, что полезно при отсутствии реальных данных или для дополнения существующих.
🔐 Лицензия: Apache-2.0
🖥 Github (https://github.com/plexe-ai/smolmodels)
@Python_Community_ru
🐍 Как легко создать мультисловарь (Multi-dictionary) в Python
Хотите, чтобы один ключ в словаре соответствовал нескольким значениям?
Это просто!
Используйте collections.defaultdict и встроенный list:
from collections import defaultdict
multidict = defaultdict(list)
multidict["SW"].append("Han Solo")
multidict["SW"].append("R2D2")
🔁 Теперь каждый ключ по умолчанию связан с пустым списком. А метод append добавляет новое значение в этот список.
Но будьте внимательны: это немного “обман”. На самом деле словарь по-прежнему отображает один ключ → одно значение. Просто это значение — список, в который вы сами добавляете что угодно.
Почему defaultdict удобен?
Потому что вам не нужно проверять, существует ли ключ в словаре. Пустой список будет создан автоматически при первом обращении к ключу.
@Python_Community_ru