mypy в Python: типизация и контроль скриптов
👩💻 Сегодня обсудим, как встроить ad-hoc скрипты из ~/bin в предсказуемую и проверяемую автоматизацию. В статье Simple Thread Джо Понд дал руководство по снижению риска ошибок.
В чем кроется проблема?
• Скрипт удобен, но непредсказуем: ошибки типов проявляются только во время выполнения.
• Без явных контрактов функций рефакторинг становится рискованным, растёт технический долг.
• Чем больше людей правят код, тем выше риск регресса и скрытых багов в проде.
Какие решения?
Пошаговое улучшение надежности кода: добавьте статическую типизацию через mypy, управляйте зависимостями через Poetry и запускайте проверки в CI. Так, вы постепенно укрепляете код и минимизируете риски, когда проект расширяется и подключаются новые разработчики.
Как внедрить?
Проверка типов на старте — один файл за раз
• Добавьте в dev-dependencies:
• Запустите проверку для конкретного файла:
Так, вы находите баги до запуска и спокойно приступаете к следующему шагу.
Добавьте mypy в CI/CD
• Создайте окружение через Poetry и проверьте проект mypy
Типы проверяются в пайплайне: ошибки останавливают merge и защищают main branch от багов.
Мигрируйте постепенно
• Переносите типизацию модуль за модулем, начинайте с ключевых утилит и точек входа.
• Нет необходимости переписывать весь проект сразу — можно внедрять статическую проверку там, где она реально нужна.
Для желающих узнать историю развития Python рекомендуем прочесть статью здесь👈
Делимся подборкой репозиториев:
👩💻 python/mypy — анализирует типы для Python, реализует PEP 484. Нужен как эталонный инструмент для проверки контрактов и постепенной типизации кода.
👩💻 tsuyoshicho/action-mypy — готовая GitHub Action для запуска mypy в CI; поддерживает вывод в формате JSON, удобно для интеграции с reviewdog и системами агрегации ошибок
#devops #python #mypy
В чем кроется проблема?
• Скрипт удобен, но непредсказуем: ошибки типов проявляются только во время выполнения.
• Без явных контрактов функций рефакторинг становится рискованным, растёт технический долг.
• Чем больше людей правят код, тем выше риск регресса и скрытых багов в проде.
Какие решения?
Пошаговое улучшение надежности кода: добавьте статическую типизацию через 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 рекомендуем прочесть статью здесь
Делимся подборкой репозиториев:
#devops #python #mypy
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥10👍5❤4
Когда стоит внедрять mypy в Python-проект?
👤 В продолжении темы поста о типизации и контроле скриптов, публикуем обсуждение на Reddit: имеет ли смысл подключать type hints и mypy или проще с самого начала выбрать язык со статической типизацией?
Что говорят коллеги?
💬 Итак, никаких категоричных решений, только прагматичный подход: продолжайте использовать Python из-за широкой экосистемы и доступности специалистов, а type hints и mypy внедряйте по случаю, когда проект масштабируется, растёт команда и требуется предсказуемость.
На каких этапах вы внедряете type hints и mypy?
#Python #mypy #reddit
Что говорят коллеги?
Tinche_: Невозможно свести всё к одному аргументу — слишком много переменных. Python — не только про динамическую типизация. Был у меня случай, руководил крупным проектом с десятками миллионов долларов прибыли. В ходе работы я мигрировал от неаннотированного кода к почти полной типизации на уровне аннотаций с mypy. Получил с этого плюшки, но для такого перехода опыт и план обязательны
IWasGettingThePaper: Типы не устраняют баги навсегда и не заменяют тесты. MyPy помогает выявить часть ошибок, не так много, как хотелось бы, и улучшает читаемость кода, но статическая проверка — не серебряная пуля
DadAndDominant: Как человек не рождается взрослым, так и компании развиваются постепенно. На старте важнее всего быстрое прототипирование, пусть даже что-то работает лишь в 90% случаев — это всё равно позволяет выпускать продукт.
Когда проект разрастается, увеличивается кодовая база, нанимаются новые люди, а технический долг начинает съедать время разработчиков, приходят автоматические тесты, гайды по стилю и mypy — без них уже сложнее нормально релизить.
Ну и есть другие факторы при выборе языка, так что всё зависит от контекста.
На каких этапах вы внедряете type hints и mypy?
#Python #mypy #reddit
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤6👍5🔥4