Напишите код Python
Мы выполняем большую часть разработки программного обеспечения Python в среде локального компьютера: в изолированной программной среде разработчика программного обеспечения. Я обсуждаю инструменты, которые используются для разработки и тестирования для удобства чтения, тестирования, профилирования, ведения журналов, качества, безопасности и контроля версий кода, прежде чем он будет опубликован для совместного использования на серверах разработки, тестирования и стадии.
Вступление
Мы постоянно оцениваем программные инструменты на каждом этапе жизненного цикла разработки Python.
Я стараюсь избегать использования термина DevOps и последних маркетинговых терминов DataOps, GitOps, CloudOps и MLOps.
Python
Мы использовали Python преимущественно (90%) в течение последних семи лет, потому что:
- Почти все новые модели машинного обучения, облака, графические процессоры и многие другие платформы доступны в виде пакета Python.
- Ассортимент и количество бесплатных кодов и пакетов являются самыми большими, что мы видели.
- Собственный Python медленнее, чем C, в 20+ раз, но почти все пакеты Python близки к скорости C, поскольку они представляют собой тонкие API-интерфейсы по сравнению с CPython или используют какой-либо другой метод повышения производительности.
Мы думаем, что со временем популярность Python как первого выбора для машинного обучения упадет, но не в ближайшие несколько лет.
Скорость выполнения Python, похоже, вызывает большую часть критики. Большая часть критики исчезнет, если будет найден способ компиляции Python.
Если инструменты постобработки Python 4.x или Python обеспечивают компиляцию и параллелизм потоков на семантическом уровне, то в обозримом будущем он останется на первом месте как язык машинного обучения.
В оставшейся части статьи я обсуждаю только инструменты, связанные с Python, такие как IDE.
Интегрированная среда разработки (IDE)
Мы используем эти четыре хороших варианта для Python IDE. Мы используем комбинацию:
1. Jupyter Notebook или 2. JupyterLab
Jupyter Notebook или JupyterLab позволяют встраивать текст, встраивать код и запускать код в интерактивном режиме. В их основе лежит лабораторная тетрадь.
«Project Jupyter существует для разработки программного обеспечения с открытым исходным кодом, открытых стандартов и интерактивных вычислительных услуг на десятках языков программирования. - Jupyter ProjectProject Jupyter существует для разработки программного обеспечения с открытым исходным кодом, открытых стандартов и интерактивных вычислительных услуг на десятках языков программирования ». - Проект Jupyter
3. PyCharm или 4. VS Code
PyCharm и VS Code - самые популярные IDE (интерактивные среды разработки) для Python.
Мы используем PyCharm (или VS Code) для разработки, документирования, тестирования и отладки. Оба интегрируются со встроенным форматированием документации, контролем версий (Git или GitHub), пакетами тестирования, покрытием, линтерами, средствами проверки подсказок типов и форматами кода.
Форматирование кода
5. черный ПЭП-8
Black - это инструмент форматирования кода, основанный на общем руководстве по стилю PEP-8. Кроме того, pycodestyle или Flake8 отлично подходят для проверки соблюдения рекомендаций PEP-8.
Мы используем черный цвет для форматирования всех файлов кода в песочнице.
Отслеживайте сложность вашего проекта
Прежде чем приступить к рефакторингу, оцените сложность своего кода.
Мы используем следующие показатели:
- LOC
- Цикломатическая сложность - мера того, сколько независимых путей кода в вашем проекте.
- Операнды Холстеда - Операнды - это значения и имена переменных.
- Индекс ремонтопригодности - индекс ремонтопригодности можно использовать в качестве меры, чтобы получить текущую ремонтопригодность вашего приложения и посмотреть, добиваетесь ли вы прогресса по мере его рефакторинга. Шкала считает, что все, что ниже 25, труднее в обслуживании, а все, что выше 75 - просто в обслуживании. Индекс ремонтопригодности также обозначается как MI.
6. Хитрый
Wily - это инструмент с открытым исходным кодом для создания отчетов о показателях сложности кода. Эти отчеты позволяют нам отслеживать, как наши показатели сложности кода ведут себя во время рефакторинга.
Рефакторинг
В следующем ресурсе подробно описаны показатели сложности. Кроме того, это хороший обзор некоторых практик рефакторинга с точки зрения антипаттернов. Я рекомендую прочитать «Рефакторинг приложений Python для простоты» перед тем, как начать свой проект рефакторинга:
Примечание. PyCharm и VS Code позволяют выполнять множество действий по рефакторингу.
Тестирование
7. pytest
За свою карьеру мы использовали много разных фреймворков. Мы остановились на pytest для модульного тестирования в первую очередь потому, что требуется минимальный шаблон.
8. Coverage.py
Coverage.py - это инструмент, который мы используем для измерения объема кода, охватываемого нашей платформой Pytest.
Профилирование
9. Скален
Мы используем Scalene вместо встроенного профилировщика Python.
Scalene - это высокопроизводительный профилировщик ЦП и памяти для Python, который выполняет несколько вещей, недоступных другим профилировщикам Python. Он работает на порядки быстрее, чем другие профилировщики, при этом предоставляя гораздо более подробную информацию.
Проверка подсказки типа
Python - это язык с динамической типизацией. Выпуски Python 3.5 и более поздних версий допускают подсказки типов. Я подчеркиваю слово подсказки, потому что подсказки типа не влияют на интерпретатор Python.
Начиная с версии 3.5 (PEP 484) в Python появились подсказки типов. Подсказки типа (примечание: не строгая проверка типов) позволяют выполнять статическую проверку типа кода вне Python.
Подсказки типа необязательны. Вы можете вставить их или оставить в коде без каких-либо последствий. Насколько вам известно, интерпретатор Python игнорирует подсказки типа.
10. Mypy
В 2012 году Юкка Лехтосало выпустил первую программу проверки типов с открытым исходным кодом (с амбициозными планами компиляции статической типизации на будущее). Программы проверки типов Mypy, имеющие аннотации типов, соответствующие PEP 484. Mypy часто используется в непрерывной интеграции для предотвращения ошибок типа. Mypy присоединяется к другим инструментам разработчика, таким как pytest, black, pylint и Codacy.
Подсказки типа - это просто подсказки, которые сторонние инструменты, такие как Mypy, могут использовать для выявления потенциальных ошибок.
11. Pytype
Pytype - это средство проверки статического типа для любых подсказок типа, которые вы добавили в свой код. Поскольку это от Google, это не только средство проверки статического типа. Дополнительный функционал включает:
- Он помечает такие ошибки, как орфографические ошибки в именах атрибутов, неправильные вызовы функций и т. Д. Вы можете использовать pytype вместо pylint.
- С намеком на будущую компиляцию, pytype генерирует аннотации типов в файлах pyi. Полученные файлы pyi объединяются обратно в исходный код Python с помощью инструмента merge-pyi.
Все эти инструменты можно загрузить и установить бесплатно.
Анализ надежности
12. PyRe
Как код может быть безопасным, если он ненадежен? Надежность - основа безопасности.
PyRe предоставляет функции для анализа надежности конструкций:
- Корреляция между случайными величинами, измеренными при анализе надежности конструкций
- Различные методы надежности Apple
- Включает несколько статистических распределений
- Сохраняет сформированный отчет на диск
Безопасность
13. Писа в Facebook Pyre
Pysa выявляет потенциальные дефекты безопасности с помощью анализа искажений входных данных.
Испорченные данные - это данные, к которым обращаются осторожно. Pysa работает, отслеживая потоки данных от места их происхождения (источников) до места, где они заканчиваются в опасном месте (приемники). - Пылающая документация
Pysa требует большего, чем обычная установка пакета Python, о котором вы можете прочитать здесь.
Примечание. Входные данные должны быть из нескольких источников и изменяться со временем, чтобы оправдать использование Pysa.
Инструменты автоматической проверки кода
14. пилинт
Мы используем pylint для поиска ошибок и подозрительного кода на нашем локальном узле кодирования. Мы используем pylint для «линтинга» полных кодов проекта при отправке в репозиторий GitHub.
15. Codacy
Codacy выявляет больше ошибок и подозрительного кода, чем pylint, включая некоторые стилистические предупреждения, которые мы игнорируем. Как заявляет Codacy в своем слогане: Автоматизируйте проверку кода ваших коммитов и запросов на вытягивание.
Контроль версий
16. Git
Мы используем Git для локального контроля версий файлов. Как только модульные тесты проходят на одной из локальных машин, мы отправляем наш код в репозиторий в облаке GitHub.
логирование
17. Логуру
У Python есть пакет регистратора. Хорошее прочтение о пакете регистратора можно найти в этом сообщении в блоге:
Однако я предпочитаю использовать недавно выпущенный пакет Loguru, потому что он проще в использовании, чем регистратор, и Loguru безопасен для процессов и потоков, в то время как регистратор не является безопасным для процесса "из коробки".
Вы можете узнать, как мы используем Loguru, прочитав:
Виртуальная среда
18. Докер
Docker создает образ приложения и его зависимостей как полноценного автономного компонента, который можно перенести на большинство предложений поставщиков облачных услуг.
Docker Compose используется для управления несколькими контейнерами одновременно для одного и того же приложения. Этот инструмент предлагает те же функции, что и Docker, но позволяет создавать более сложные приложения.
Создание образов Docker подробно описано в следующих блогах:
Резюме
Я подробно описал 18 инструментов кодирования для вашей песочницы разработчика Python. (Помните, я называю вашу локальную среду разработки вашей песочницей.)
Я настоятельно рекомендую вам иметь песочницу для каждого проекта. Ваша песочница состоит из языка (языков) вашего проекта и всех зависящих от импорта пакетов, заключенных в контейнер или в виртуальную среду.
Все описанные ранее IDE выполняются в виртуальной среде.
Примечание. Преобладающим программным обеспечением для контейнеризации является Docker.
Удачного кодирования!