Создание современной среды разработки на Python

Будучи разработчиком на Python в течение последних нескольких лет, я собрал список своих любимых пакетов/инструментов, которые я использую почти в каждом проекте. Разработка — это командная работа, и в какой-то момент кому-то придется читать и/или изменять написанный вами код. Если код плохо реализован, а разработчику нужно реализовать новую функцию или исправить ошибку, это, скорее всего, приведет к возникновению дополнительного технического долга. Поэтому мне нравится заставлять разработчиков (*включая меня самого*?) создавать код, который тестируется, поддерживается, читается и, самое главное, является последовательным, иначе он будет отклонен. В результате процесс разработки программного обеспечения проходит более гладко, поскольку они будут работать над одним и тем же надежным кодом.

В этой статье блога показано, как я устанавливаю и настраиваю свою среду разработки Python, используя pyenv и Poetry, как на Unix, так и на Windows системах для создания одинакового согласованного кода, что помогает предотвратить технический долг.

Установка pyenv ?

Загрузка и установка Python из официального бинарника ограничивает вас одной конкретной версией Python, что не очень удобно, если вы работаете над несколькими проектами с разными версиями Python. Поэтому лучше использовать pyenv — инструмент, позволяющий легко переключаться между несколькими версиями Python.

Установка для Windows

Пользователям Windows я рекомендую установить WSL2, подсистему Windows, которая позволяет разработчикам работать в среде Linux без накладных расходов на традиционную виртуальную машину или установку двойной загрузки. Вы можете установить WSL2, выполнив следующую команду в PowerShell или Command Prompt:

Если вы не хотите использовать WSL2, вы можете установить pyenv-win, менее современный подход * и перейти к разделу **Установка версии Python с помощью pyenv*.

После установки найдите Ubuntu on Windows (WSL терминал) и откройте его. Перед вами откроется оболочка bash и попросит ввести имя пользователя и пароль. Как только они будут заданы, ваш терминал готов к работе ? !

Перед установкой pyenv вам нужно будет обновить окружение и установить несколько зависимостей сборки *(если у вас их еще нет). *Откройте терминал и выполните следующие команды:

> sudo apt update && sudo apt upgrade
> sudo apt install -y build-essential git curl libexpat1-dev libssl-dev zlib1g-dev libncurses5-dev libbz2-dev liblzma-dev libsqlite3-dev libffi-dev tcl-dev linux-headers-generic libgdbm-dev libreadline-dev tk tk-dev
Войти в полноэкранный режим Выйти из полноэкранного режима

pyenv теперь готов к установке и настройке (укажите терминалу, где находится pyenv):

> curl https://pyenv.run | bash

> echo 'nexport PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc
> echo 'neval "$(pyenv init -)"' >> ~/.bashrc
> echo 'neval "$(pyenv init --path)"' >> ~/.bashrc

> source ~/.bashrc

# Confirm successful installation:
> pyenv --version
pyenv 2.2.5 # Your version will likely be newer.
Войдите в полноэкранный режим Выйти из полноэкранного режима

Установка версии Python с помощью pyenv

После успешной установки pyenv установите глобальную версию Python с помощью следующих команд:

# Install the required Python version:
> pyenv install 3.9.0

# Refresh pyenv since you installed a new Python version:
> pyenv rehash

# Set your global Python version:
> pyenv global 3.9.0

# You can also set the local Python version, i.e. for a project:
# > pyenv local 3.9.0

# Confirm Python version:
> pyenv version
3.9.0 (set by /home/wsl/.pyenv/version)
Войти в полноэкранный режим Выйти из полноэкранного режима

Если вам нужна другая версия Python, вы можете просто выполнить те же команды с другим номером версии ?.

Установка Python ?

Системы упаковки и управления зависимостями в Python довольно запутанны и сложны для понимания новичков. Даже для опытных разработчиков создание всех файлов, необходимых для проекта Python, иногда может быть обременительным. Poetry помогает вам объявлять, управлять и устанавливать зависимости в проектах Python, обеспечивая наличие нужного стека везде. Он автоматически создает изолированные среды для каждого проекта, предотвращая модификацию зависимостей в другом проекте.

> pyenv shell 3.9.0

> curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -

> source ~/.bashrc

# Confirm installation was successful:
> poetry --version
Poetry version 1.1.13 # Your version will likely be newer.
Вход в полноэкранный режим Выход из полноэкранного режима

EditorConfig

EditorConfig помогает поддерживать согласованные стили кодирования для нескольких разработчиков, работающих над одним проектом в различных редакторах и интегрированных средах разработки (IDE). Он работает путем чтения конфигурационного файла .editorconfig, предоставляемого на верхнем уровне проекта. Большинство IDE имеют встроенную поддержку, но это список IDE/редакторов, для которых требуется плагин.

Это стандартный файл .editorconfig, который я использую во всех своих проектах Python:

Теперь ваша среда готова к созданию современного проекта Python ?.

Создание и настройка проекта Python ⚙️

Ниже описано, как *ручно *создать и настроить проект Python с помощью pyenv и Poetry.

Чтобы создать новый проект Python, необходимо указать версию Python с помощью pyenv, а затем использовать Poetry для создания проекта.

> pyenv shell 3.9.11
> poetry new PROJECT_NAME # Example testproject
> cd testproject
> git init # Initialise the repository
Вход в полноэкранный режим Выход из полноэкранного режима

Далее создайте конфигурацию .editorconfig, указанную выше. Структура дерева вашего проекта должна выглядеть следующим образом:

> tree

.
├── .editorconfig
├── .git
│   ├── ...
├── README.rst
├── pyproject.toml
├── testproject
│   └── __init__.py
└── tests
    ├── __init__.py
    └── test_testproject.py

12 directories, 22 files
Вход в полноэкранный режим Выйти из полноэкранного режима

Лично я предпочитаю Markdown вместо reStructuredText, поэтому я переименовал README.rst в README.md . Вся логика приложения помещается в папку с именем вашего проекта, а тесты — в папку tests.

Мои основные пакеты Python ?

В этом разделе описано большинство пакетов для разработки (пакеты, которые необходимы только на этапе разработки), которые я использую в проектах Python.

pytest с pytest-cov

Фреймворк pytest позволяет легко писать небольшие тесты, но при этом масштабируется для поддержки сложного функционального тестирования приложений и библиотек. Я предпочитаю pytest встроенной библиотеке unittest, поскольку она позволяет использовать такие плагины, как pytest-xdist, который позволяет выполнять несколько тестов одновременно, ускоряя время выполнения тестов и требуя меньше строк кода для получения того же результата, что и unittest. Кроме того, pytest-cov — это плагин, который автоматически создает отчет о покрытии тестов.

wemake-python-styleguide

Команда wemake.services описывает wemake-python-styleguide как *самый строгий и самый категоричный Python-линтер на свете*. По сути, это пакет flake8, инструмент линтинга, анализирующий код на наличие дефектов, с дополнениями. Его основными задачами являются:

  • Обеспечение использования Python 3.6+.

  • Значительно снизить сложность кода и сделать его более удобным для сопровождения.

  • Внедрение правила «Должен быть один — и желательно только один — очевидный способ сделать это» в стили кодирования и именования.

  • Защита разработчиков от возможных ошибок и внедрение лучших практик.

Я также рекомендую плагин flake8-pytest-style, если вы используете pytest.

Для существующих проектов вы можете использовать пакет flakehell с функцией baseline для сообщения о новых нарушениях, поскольку интеграция нового линкера, скорее всего, приведет к сотням или даже тысячам нарушений. Это руководство объясняет, как интегрировать flakehell и устранять нарушения с течением времени.

Mypy

Mypy — это опциональная статическая проверка типов, цель которой — объединить преимущества динамической (или «утиной») типизации и статической типизации. Преимуществами статически типизированного кода являются повышенная читабельность и удобство сопровождения. Для существующей кодовой базы здесь приведено руководство по внедрению Mypy.

Безопасность

В отчете по безопасности за 2021 год, подготовленном компанией Snyk, говорится, что 47% проектов на Python содержат известные уязвимости. С другой стороны, почти 87% известных уязвимостей могут быть устранены путем обновления уязвимого пакета. Safety проверяет установленные вами зависимости на наличие известных уязвимостей безопасности.

pre-commit

pre-commit — это фреймворк для управления и поддержки многоязычных крючков предварительной коммисии. Например, хук, запускающий pytest, должен успешно выполнить проверку перед фиксацией кода в репозитории, предотвращая дефекты кода. Следующий конфигурационный файл pre-commit — это то, что я использую в своих Python-проектах. Он гарантирует, что тесты, покрытие, проверка типов и сканирование на уязвимости пройдут до фиксации кода.

Это файл .pre-commit-config.yaml, используемый в приведенном выше примере:

Nitpick

Поддержание конфигураций в разных проектах может стать утомительным, особенно если учесть, что EditorConfig, pytest-cov, flake8, Mypy и pre-commit требуют конфигурационных файлов. Nitpick — это инструмент и плагин для flake8, который обеспечивает одинаковые конфигурации в нескольких языково-независимых проектах, автоматизируя эту утомительную настройку.

После установки добавьте следующую строку в файл pyproject.toml:

**[tool.nitpick]**
style = "https://raw.githubusercontent.com/wemake-services/wemake-python-styleguide/master/styles/nitpick-style-wemake.toml"
Войти в полноэкранный режим Выйти из полноэкранного режима

Для успешного прохождения проверки Nitpick вам потребуется создать файлы .gitignore и CHANGELOG.md.

Он автоматически создаст файл setup.cfg, который будет содержать все необходимые конфигурации.

Поздравляем, вы успешно создали современную среду разработки на Python ?. Если вы хотите пообщаться со мной, вы можете найти меня на Linkedin или Github. Спасибо, что читаете ?!

Дополнительно: Интеграция VSCode WSL2

Если ваш редактор — VSCode, то вам повезло, потому что вы можете легко интегрировать подсистему Linux с помощью его удаленного плагина WSL. После установки откройте терминал WSL и выполните код . . Это автоматически откроет редактор VSCode в подсистеме Linux. Подробнее об этом вы можете прочитать здесь.

Дополнительно: Автоматизированная установка и настройка проекта

Если вы похожи на меня, то вам необходимо автоматизировать задачу, когда вы делаете ее более одного раза. Я автоматизировал создание и настройку современного Python-проекта с помощью cookiecutter. Сначала вам нужно будет настроить свое окружение. Также в nitpick используется мой собственный вариант конфигурации wemake-services, вы можете посмотреть репозиторий здесь.

> pyenv shell 3.9.11

---------------------------------------------
# Unix: Specify the name of the project.
> export PROJECT_NAME="MY_PROJECT_NAME"
=============================================
# Windows: Specifcy the name of the project.
> set PROJECT_NAME="MY_PROJECT_NAME"
---------------------------------------------

> python -m pip install cookiecutter &&
python -m cookiecutter --no-input gh:ShaneNolan/python-project-template 
project_name=$PROJECT_NAME &&
(cd $PROJECT_NAME && git init &&
poetry init --no-interaction --name $PROJECT_NAME &&
poetry add mypy pytest pytest-cov flake8-pytest-style wemake-python-styleguide safety pre-commit nitpick --dev &&
poetry run nitpick fix &&
poetry run pre-commit install) && python -m uninstall cookiecutter
Вход в полноэкранный режим Выход из полноэкранного режима

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *