DevOps FM
4.93K subscribers
637 photos
12 videos
10 files
752 links
♾️ Канал для тех, кто живёт DevOps и системным администрированием.

Новости, статьи, best practices, инструменты и чилл-аут контент. Cloud Native, Docker, Kubernetes, CI/CD, БД, мониторинг etc.

По вопросам — к Ладе @b_vls
Download Telegram
mypy в Python: типизация и контроль скриптов

👩‍💻Сегодня обсудим, как встроить ad-hoc скрипты из ~/bin в предсказуемую и проверяемую автоматизацию. В статье Simple Thread Джо Понд дал руководство по снижению риска ошибок.

В чем кроется проблема?
• Скрипт удобен, но непредсказуем: ошибки типов проявляются только во время выполнения.
• Без явных контрактов функций рефакторинг становится рискованным, растёт технический долг.
• Чем больше людей правят код, тем выше риск регресса и скрытых багов в проде.

Какие решения?
Пошаговое улучшение надежности кода: добавьте статическую типизацию через mypy, управляйте зависимостями через Poetry и запускайте проверки в CI. Так, вы постепенно укрепляете код и минимизируете риски, когда проект расширяется и подключаются новые разработчики.

Как внедрить?
Проверка типов на старте — один файл за раз
• Добавьте в dev-dependencies:
poetry add --group dev mypy

• Запустите проверку для конкретного файла:
poetry run mypy main.py

Так, вы находите баги до запуска и спокойно приступаете к следующему шагу.

Добавьте mypy в CI/CD
• Создайте окружение через Poetry и проверьте проект mypy
poetry run mypy .

Типы проверяются в пайплайне: ошибки останавливают merge и защищают main branch от багов.

Мигрируйте постепенно
• Переносите типизацию модуль за модулем, начинайте с ключевых утилит и точек входа.
• Нет необходимости переписывать весь проект сразу — можно внедрять статическую проверку там, где она реально нужна.

Для желающих узнать историю развития Python рекомендуем прочесть статью здесь 👈

Делимся подборкой репозиториев:
👩‍💻python/mypy — анализирует типы для Python, реализует PEP 484. Нужен как эталонный инструмент для проверки контрактов и постепенной типизации кода.
👩‍💻 tsuyoshicho/action-mypy — готовая GitHub Action для запуска mypy в CI; поддерживает вывод в формате JSON, удобно для интеграции с reviewdog и системами агрегации ошибок

#devops #python #mypy
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥10👍54
Когда стоит внедрять mypy в Python-проект?

👤В продолжении темы поста о типизации и контроле скриптов, публикуем обсуждение на Reddit: имеет ли смысл подключать type hints и mypy или проще с самого начала выбрать язык со статической типизацией?

Что говорят коллеги?

Tinche_: Невозможно свести всё к одному аргументу — слишком много переменных. Python — не только про динамическую типизация. Был у меня случай, руководил крупным проектом с десятками миллионов долларов прибыли. В ходе работы я мигрировал от неаннотированного кода к почти полной типизации на уровне аннотаций с mypy. Получил с этого плюшки, но для такого перехода опыт и план обязательны

IWasGettingThePaper: Типы не устраняют баги навсегда и не заменяют тесты. MyPy помогает выявить часть ошибок, не так много, как хотелось бы, и улучшает читаемость кода, но статическая проверка — не серебряная пуля

DadAndDominant: Как человек не рождается взрослым, так и компании развиваются постепенно. На старте важнее всего быстрое прототипирование, пусть даже что-то работает лишь в 90% случаев — это всё равно позволяет выпускать продукт.

Когда проект разрастается, увеличивается кодовая база, нанимаются новые люди, а технический долг начинает съедать время разработчиков, приходят автоматические тесты, гайды по стилю и mypy — без них уже сложнее нормально релизить.
Ну и есть другие факторы при выборе языка, так что всё зависит от контекста.


💬Итак, никаких категоричных решений, только прагматичный подход: продолжайте использовать Python из-за широкой экосистемы и доступности специалистов, а type hints и mypy внедряйте по случаю, когда проект масштабируется, растёт команда и требуется предсказуемость.

На каких этапах вы внедряете type hints и mypy?

#Python #mypy #reddit
Please open Telegram to view this post
VIEW IN TELEGRAM
16👍5🔥4