Напишите код 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.

Удачного кодирования!