Контрольный список для Python-разработчика

Перед тем, как взяться за создание проекта, который планируется распространять, стоит удостовериться, что соблюдены основные моменты, связанные с процессом разработки. Статья рассказывает, на что стоит обратить внимание. Рекомендации будут полезны для большинства проектов.

1. Используете ли вы виртуальные среды для управления пакетами?

Виртуальные среды обязательны для каждого Python-проекта. Они изолируют пакеты, используемые конкретным приложением, поэтому можно легко использовать разные версии пакетов для разных проектов.

virtualenvwrapper — один из удобных вариантов для организации виртуальных сред. А начиная с Python 3.3 можно использовать стандартный библиотечный модуль (venv).

2. Используете ли вы инструмент для контроля версий?

Таким инструментом де-факто является git. Настоятельно рекомендуется изучить более сложные аспекты git, чтобы получить максимум от этого мощного инструмента. Git Pro — отличная книга для изучения деталей git.

3. Используете ли вы централизованный репозиторий (GitLab, GitHub, BitBucket) для совместной работы и обмена кодом?

Все популярные варианты (GitLab, GitHub и BitBucket) — хороший выбор.

4. Подготовили ли вы файл README, который поможет как активным разработчикам, так и тем, кто впервые увидел ваш код?

Хороший README пригодится всем. Полезно включать в него следующую информацию:

  1. Назначение проекта.
  2. Скриншот или визуализация функционала.
  3. Как запустить приложение и тесты для проекта.
  4. Текущее состояние проекта (состояние тестов: пройдены / не пройдены, покрытие тестами).

Хороший пример того, каким может быть удачный README, можно найти в публикации Дена Бейдера — Write the Great README.

5. Тестируете ли вы приложение (модуль/интеграцию/функцию)?

Тестирование в Python стало довольно простым. Есть много отличных возможностей для быстрого написания и запуска тестов. Если говорить о фреймворках, то unittest (часть стандартной библиотеки) и pytest — отличный выбор. Еще можно обратить внимание на nose2. Инструмент упростит процесс запуска тестов.

6. Используете ли вы хотя бы один инструмент статического анализа для поиска распространенных ошибок в приложении?

Линтеры — это инструменты статического анализа, которые проверяют исходный код на ошибки, связанные со стилем кодирования, проблемы с дизайном и использование неудачных шаблонов проектирования. Есть много отличных вариантов, среди них — flake8 и pydocstyle.

Лучший способ запускать линтеры — с помощью инструмента непрерывной интеграции (CI).

7. Используете ли вы непрерывную интеграцию (CI) для автоматизации тестирования?

Настройка процесса непрерывной интеграции (CI) очень облегчает жизнь. Несложно настроить процесс CI для выполнения всех тестов (модульных или интеграционных) и запуска линтеров. Больше не нужно беспокоиться о том, что вы могли забыть запустить тесты для всех нужных случаев, и проверять результаты линтера вручную. Есть много отличных вариантов для CI: TravisCI, Jenkins, GitLab и т. д.

8. Достаточно ли полна документация на проект? Используете ли вы инструменты для создания документации (Sphinx)?

Документация на проект важна для тех, кто хочет разобраться в вашем исходном коде, и для разработчиков, которые захотят вспомнить, что они сделали в определенном модуле шесть месяцев назад.

9. Используете ли вы инструмент логирования для отслеживания процесса выполнения приложения?

Оператор print помогает отладке, но инструменты логирования имеют больше возможностей. Стандартный библиотечный модуль (logging) немного сложный для настройки, но работает очень хорошо.

10. Отслеживаете ли вы ошибки и предложения от пользователей?

Если вы используете централизованный исходный репозиторий (GitLab, GitHub, BitBucket), в нем должна быть встроенная система отслеживания ошибок и предложений. Все довольно просто: нужно вести учет того, какие ошибки есть в проекте, чтобы можно было их исправить; записывайте хорошие идеи, тогда вы будете знать, как можно улучить проект.

11. Можно ли запустить приложение минимальными усилиями?

Идеальная ситуация для приложения — возможность запустить его с помощью одной команды. Если предварительно нужно выполнить вручную несколько шагов, вы рискуете потерять интерес пользователей к вашему проекту.

Хотя для запуска приложения могут потребоваться некоторые настройки, этот процесс должен быть максимально простым. В идеальном случае должна быть возможность запустить приложение одной командой.


По материалам Patrick`s Software Blog. Оригинал: Software Development Checklist for Python Applications.