🖥 Как организовать архитектуру большого Python-проекта?
Разработка крупного Python-проекта требует продуманной архитектуры. Правильная структура кода упрощает развитие, тестирование и поддержку приложения.
В этой статье мы рассмотрим ключевые принципы архитектурной организации для разных типов проектов - веб-приложений, библиотек, микросервисов и систем обработки данных.
Обсудим разделение системы на слои (domain, service, infrastructure), использование популярных шаблонов проектирования (Dependency Injection, Repository, Facade), организацию кода по модулям и пакетам, примеры структуры каталогов, работу с зависимостями и конфигурацией (Pydantic, dotenv), логгирование и мониторинг, обеспечение тестируемости, поддержку расширяемости и модульности.
Также приведем примеры кода и структуры каталогов, а в конце – общие советы и распространенные ошибки, которых следует избегать.
https://uproger.com/kak-organizovat-arhitekturu-bolshogo-python-proekta/
@Python_Community_ru
Разработка крупного Python-проекта требует продуманной архитектуры. Правильная структура кода упрощает развитие, тестирование и поддержку приложения.
В этой статье мы рассмотрим ключевые принципы архитектурной организации для разных типов проектов - веб-приложений, библиотек, микросервисов и систем обработки данных.
Обсудим разделение системы на слои (domain, service, infrastructure), использование популярных шаблонов проектирования (Dependency Injection, Repository, Facade), организацию кода по модулям и пакетам, примеры структуры каталогов, работу с зависимостями и конфигурацией (Pydantic, dotenv), логгирование и мониторинг, обеспечение тестируемости, поддержку расширяемости и модульности.
Также приведем примеры кода и структуры каталогов, а в конце – общие советы и распространенные ошибки, которых следует избегать.
https://uproger.com/kak-organizovat-arhitekturu-bolshogo-python-proekta/
@Python_Community_ru
🐍⚙️ Продвинутый Python + Docker совет для production:
Используй multi-stage builds + wheels cache - это радикально уменьшает размер образа и ускоряет сборки.
В первом этапе собираешь wheels (компилируемые пакеты), а во втором — устанавливаешь их уже в чистый runtime-слой:
FROM python:3.12 AS builder
RUN pip install --upgrade pip
COPY requirements.txt .
RUN pip wheel --wheel-dir /wheels -r requirements.txt
FROM python:3.12-slim
COPY --from=builder /wheels /wheels
RUN pip install --no-index --find-links=/wheels -r /wheels/requirements.txt
COPY app/ /app
🔥 Плюс:
— быстрый rebuild
— детерминированные зависимости
— значительно меньше образ
Этот трюк мало кто использует, но он делает Docker-окружение Python уровня enterprise.
@Python_Community_ru
Используй multi-stage builds + wheels cache - это радикально уменьшает размер образа и ускоряет сборки.
В первом этапе собираешь wheels (компилируемые пакеты), а во втором — устанавливаешь их уже в чистый runtime-слой:
FROM python:3.12 AS builder
RUN pip install --upgrade pip
COPY requirements.txt .
RUN pip wheel --wheel-dir /wheels -r requirements.txt
FROM python:3.12-slim
COPY --from=builder /wheels /wheels
RUN pip install --no-index --find-links=/wheels -r /wheels/requirements.txt
COPY app/ /app
🔥 Плюс:
— быстрый rebuild
— детерминированные зависимости
— значительно меньше образ
Этот трюк мало кто использует, но он делает Docker-окружение Python уровня enterprise.
@Python_Community_ru
🔥2
🏎️ F1 Race Replay: Визуализация гонок Формулы 1 🏁
Приложение на Python для интерактивного воспроизведения гонок Формулы 1 с графическим интерфейсом. Позволяет отслеживать позиции гонщиков в реальном времени, отображать текущие круги и статус водителей, а также управлять воспроизведением с помощью удобных контролов.
🚀 Основные моменты:
- Визуализация гонок с реальными позициями на треке
- Живое обновление позиций гонщиков и их состояния
- Интерактивные элементы управления воспроизведением
- Подробная информация о телеметрии выбранных гонщиков
- Возможность настройки интерфейса и обработки данных
📌 GitHub: https://github.com/IAmTomShaw/f1-race-replay
#python
@Python_Community_ru
Приложение на Python для интерактивного воспроизведения гонок Формулы 1 с графическим интерфейсом. Позволяет отслеживать позиции гонщиков в реальном времени, отображать текущие круги и статус водителей, а также управлять воспроизведением с помощью удобных контролов.
🚀 Основные моменты:
- Визуализация гонок с реальными позициями на треке
- Живое обновление позиций гонщиков и их состояния
- Интерактивные элементы управления воспроизведением
- Подробная информация о телеметрии выбранных гонщиков
- Возможность настройки интерфейса и обработки данных
📌 GitHub: https://github.com/IAmTomShaw/f1-race-replay
#python
@Python_Community_ru
🔥1
🖥 Малоизвестный факт о Python random.seed(), который может поломать ваш код
Документация создаёт впечатление, что любое целое число просто используется как seed (это “начальная точка” для генератора случайных чисел.).
Но Python перед использованием просто берёт абсолютное значение.
То есть:
➡️ seed(3) и seed(-3) - порождают один и тот же поток случайных чисел.
Это значит, что разные seed не всегда дают разные последовательности -
Python гарантирует только обратное: одинаковый seed → одинаковые числа.
Почему так?
В исходниках CPython есть строка, которая буквально делает:
seed = abs(seed)
И знак просто теряется, хотя алгоритм случайных чисел мог бы учитывать его.
🧠 Вывод:
Не используйте небольшие вариации seed (например 5 и -5) как способ получить разные потоки случайностей — это небезопасно.
Если вам нужны независимые RNG — создавайте их явно, а не полагаясь на “умные” seed.
[1] https://docs.python.org/3/library/random.html
[2] https://github.com/python/cpython/blob/main/Modules/_randommodule.c#L321C13-L321C30
@Python_Community_ru
Документация создаёт впечатление, что любое целое число просто используется как seed (это “начальная точка” для генератора случайных чисел.).
Но Python перед использованием просто берёт абсолютное значение.
То есть:
➡️ seed(3) и seed(-3) - порождают один и тот же поток случайных чисел.
Это значит, что разные seed не всегда дают разные последовательности -
Python гарантирует только обратное: одинаковый seed → одинаковые числа.
Почему так?
В исходниках CPython есть строка, которая буквально делает:
seed = abs(seed)
И знак просто теряется, хотя алгоритм случайных чисел мог бы учитывать его.
🧠 Вывод:
Не используйте небольшие вариации seed (например 5 и -5) как способ получить разные потоки случайностей — это небезопасно.
Если вам нужны независимые RNG — создавайте их явно, а не полагаясь на “умные” seed.
[1] https://docs.python.org/3/library/random.html
[2] https://github.com/python/cpython/blob/main/Modules/_randommodule.c#L321C13-L321C30
@Python_Community_ru
🔥2
🖊️ Google Research представила InkSight — систему, которая превращает сфотографанный рукописный текст в настоящие *цифровые рукописные данные*.
Что делает InkSight?
✨ Берёт фото тетрадей, заметок или документов и переводит их в «цифровое перо» - данные, которыми можно редактировать, искать, хранить.
🧠 Под капотом:
• Vision Transformer (ViT) + mT5
• Обучение на чтение и письмо одновременно
• Без специальных планшетов - работает с обычными фото
💡 Возможности:
✔ Обработка слов и целых страниц
✔ Работает с разными языками и стилями письма
✔ Корректно извлекает текст даже на шумном фоне
✔ Результат - редактируемый векторный «ink», а не просто картинка
То есть InkSight — мост между бумажной реальностью и цифровым миром: сделал фото заметок → получил полный цифровой текст, пригодный для поиска и редактирования.
🔗 В репозитории доступны веса модели, датасет и пример кода:
github.com/google-research/inksight
@Python_Community_ru
Что делает InkSight?
✨ Берёт фото тетрадей, заметок или документов и переводит их в «цифровое перо» - данные, которыми можно редактировать, искать, хранить.
🧠 Под капотом:
• Vision Transformer (ViT) + mT5
• Обучение на чтение и письмо одновременно
• Без специальных планшетов - работает с обычными фото
💡 Возможности:
✔ Обработка слов и целых страниц
✔ Работает с разными языками и стилями письма
✔ Корректно извлекает текст даже на шумном фоне
✔ Результат - редактируемый векторный «ink», а не просто картинка
То есть InkSight — мост между бумажной реальностью и цифровым миром: сделал фото заметок → получил полный цифровой текст, пригодный для поиска и редактирования.
🔗 В репозитории доступны веса модели, датасет и пример кода:
github.com/google-research/inksight
@Python_Community_ru
🔥2
📌 Первые впечатления от системы фоновых задач в Django
В свежем разборе объясняется, как Django наконец получает встроенный инструмент для фоновой обработки заданий без необходимости тянуть сторонние библиотеки вроде Celery.
🔹 Что это такое
Django Background Tasks - новый официально поддерживаемый механизм для:
- отложенного выполнения задач (delayed jobs),
- периодических задач (cron-style),
- асинхронной фоновой обработки в рамках приложения.
🔹 Почему это важно
Раньше разработчикам приходилось выбирать сторонние решения (Celery, RQ, Dramatiq) с дополнительной инфраструктурой (Redis/RabbitMQ и т.п.). Теперь у Django будет собственный, простой и интегрированный способ:
- выполнять задачи после ответа пользователю,
- обрабатывать тяжёлые операции вне запроса,
- запускать периодические задачи без внешних кронов.
🔹 Как это работает
- Вы определяете задачу как обычную Python-функцию.
- Django регистрирует её в очереди внутреннего раннера.
- Фоновый воркер выполняет такие задачи по расписанию или сразу - без внешнего брокера.
🔹 Плюсы по сравнению с альтернативами
✔ встроенная интеграция с ORM и Django-экосистемой
✔ нет необходимости настраивать отдельный брокер
✔ ожидаемая простота и знакомый синтаксис для Django-разработчиков
🔹 О чём ещё в статье
- примеры кода с определением фоновых задач;
- как запускать и мониторить воркеры;
- ограничения и когда всё же стоит использовать более мощные системы.
📌 В сумме: Django делает шаг к тому, чтобы базовая фонвая обработка стала простой и доступной из коробки - это ускоряет разработку и снижает операционную сложность для большинства проектов.
https://roam.be/notes/2025/a-first-look-at-djangos-new-background-tasks/
@Python_Community_ru
В свежем разборе объясняется, как Django наконец получает встроенный инструмент для фоновой обработки заданий без необходимости тянуть сторонние библиотеки вроде Celery.
🔹 Что это такое
Django Background Tasks - новый официально поддерживаемый механизм для:
- отложенного выполнения задач (delayed jobs),
- периодических задач (cron-style),
- асинхронной фоновой обработки в рамках приложения.
🔹 Почему это важно
Раньше разработчикам приходилось выбирать сторонние решения (Celery, RQ, Dramatiq) с дополнительной инфраструктурой (Redis/RabbitMQ и т.п.). Теперь у Django будет собственный, простой и интегрированный способ:
- выполнять задачи после ответа пользователю,
- обрабатывать тяжёлые операции вне запроса,
- запускать периодические задачи без внешних кронов.
🔹 Как это работает
- Вы определяете задачу как обычную Python-функцию.
- Django регистрирует её в очереди внутреннего раннера.
- Фоновый воркер выполняет такие задачи по расписанию или сразу - без внешнего брокера.
🔹 Плюсы по сравнению с альтернативами
✔ встроенная интеграция с ORM и Django-экосистемой
✔ нет необходимости настраивать отдельный брокер
✔ ожидаемая простота и знакомый синтаксис для Django-разработчиков
🔹 О чём ещё в статье
- примеры кода с определением фоновых задач;
- как запускать и мониторить воркеры;
- ограничения и когда всё же стоит использовать более мощные системы.
📌 В сумме: Django делает шаг к тому, чтобы базовая фонвая обработка стала простой и доступной из коробки - это ускоряет разработку и снижает операционную сложность для большинства проектов.
https://roam.be/notes/2025/a-first-look-at-djangos-new-background-tasks/
@Python_Community_ru
🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
📝 Как быстро объяснить проект коллеге, если не знаешь, с чего начать
Иногда проще ответить на вопросы новичка, чем структурировать рассказ самому. Но когда сервис большой, а процессов много, легко запутаться: что упомянуть первым, какие детали важны, а что можно оставить на потом.
Голосовой ИИ-помощник ГигаЧат подсказывает, как выстроить объяснение так, чтобы оно было понятным с первого раза.
📌 В итоге один короткий диалог превращается в ясное объяснение, которое не требует пересказывать всё снова. Слушаем!
@Python_Community_ru
Иногда проще ответить на вопросы новичка, чем структурировать рассказ самому. Но когда сервис большой, а процессов много, легко запутаться: что упомянуть первым, какие детали важны, а что можно оставить на потом.
Голосовой ИИ-помощник ГигаЧат подсказывает, как выстроить объяснение так, чтобы оно было понятным с первого раза.
📌 В итоге один короткий диалог превращается в ясное объяснение, которое не требует пересказывать всё снова. Слушаем!
@Python_Community_ru
⚡ Git Cheatsheet - коротко и по делу
Настройка
git config --global user.name "Name" — задать имя
git config --global user.email "email" — задать почту
git config --list — показать настройки
Старт
git init — создать репозиторий
git clone url — клонировать репо
Стейджинг и коммиты
git status — статус
git add . — добавить все изменения
git reset file — убрать из стейджа
git commit -m "msg" — коммит
git commit --amend — исправить последний коммит
Ветки
git branch — список
git branch name — создать
git checkout -b name — создать и перейти
git branch -d name — удалить
Merge и Rebase
git merge branch — слить ветку
git merge --abort — отменить
git rebase branch — перебазирование
История
git log --oneline — компактная история
git log --graph --all — граф
git diff — показать изменения
Откат
git restore file — вернуть файл
git reset --soft HEAD~1 — откатить коммит, сохранить изменения
git reset --hard HEAD~1 — откатить и удалить изменения
git clean -f — удалить лишние файлы
Удалённые репозитории
git remote -v — список
git push origin branch — запушить
git pull — получить изменения
git fetch — только забрать
Теги
git tag — список
git tag name — создать
git push origin --tags — отправить теги
Stash
git stash — сохранить изменения
git stash list — список
git stash apply — применить
Поиск и анализ
git blame file — кто менял строки
git grep "text" — поиск
git bisect — бинарный поиск бага
Продвинутое
git cherry-pick commit — взять коммит
git revert commit — отменить коммит через новый
git submodule add url — добавить сабмодуль
Полезно сохранить под рукой.
@Python_Community_ru
Настройка
git config --global user.name "Name" — задать имя
git config --global user.email "email" — задать почту
git config --list — показать настройки
Старт
git init — создать репозиторий
git clone url — клонировать репо
Стейджинг и коммиты
git status — статус
git add . — добавить все изменения
git reset file — убрать из стейджа
git commit -m "msg" — коммит
git commit --amend — исправить последний коммит
Ветки
git branch — список
git branch name — создать
git checkout -b name — создать и перейти
git branch -d name — удалить
Merge и Rebase
git merge branch — слить ветку
git merge --abort — отменить
git rebase branch — перебазирование
История
git log --oneline — компактная история
git log --graph --all — граф
git diff — показать изменения
Откат
git restore file — вернуть файл
git reset --soft HEAD~1 — откатить коммит, сохранить изменения
git reset --hard HEAD~1 — откатить и удалить изменения
git clean -f — удалить лишние файлы
Удалённые репозитории
git remote -v — список
git push origin branch — запушить
git pull — получить изменения
git fetch — только забрать
Теги
git tag — список
git tag name — создать
git push origin --tags — отправить теги
Stash
git stash — сохранить изменения
git stash list — список
git stash apply — применить
Поиск и анализ
git blame file — кто менял строки
git grep "text" — поиск
git bisect — бинарный поиск бага
Продвинутое
git cherry-pick commit — взять коммит
git revert commit — отменить коммит через новый
git submodule add url — добавить сабмодуль
Полезно сохранить под рукой.
@Python_Community_ru