Проекты на Python с Poetry и VSCode Часть 2 - Шпаргалка по Python

В первой статье мы узнали, что такое файл pyproject.toml и как с ним работать, использовали Poetry для запуска нового проекта, создания виртуального окружения, а также для добавления и удаления зависимостей. Все это с помощью следующих команд:
| Command | Description |
|---|---|
poetry new [package-name] | Запуск нового Python проекта. |
poetry init | Интерактивное создание файла pyproject.toml. |
poetry install | Установка пакетов из файла pyproject.toml. |
poetry add [package-name] | Добавление пакета в виртуальное окружение. |
poetry add -D [package-name] | Добавление пакета для разработки в виртуальное окружение. |
poetry remove [package-name] | Удаление пакета из виртуального окружения. |
poetry remove -D [package-name] | Удаление пакета для разработки из виртуального окружения. |
Во второй части мы:
- Добавим наше виртуальное окружение в VSCode.
- Обновим наши зависимости.
- Интегрируем наши зависимости для разработки с редактором:
- Flake8
- Black
- Pytest
А в третьей статье мы напишем пример библиотеки, соберем наш проект с помощью Poetry и опубликуем его на PyPI.
Прежде чем начать, убедитесь, что у вас установлены VSCode, добавлено расширение Python и что вы следовали инструкциям и поняли первую статью этой серии.
Настройка Poetry в VSCode
Прошло несколько дней с первой части, поэтому не помешает проверить наличие новых версий наших зависимостей. Откройте терминал, перейдите в каталог вашего проекта и введите команду poetry update:

На данный момент новых версий не найдено.
Когда вы создаете виртуальное окружение с помощью команды venv, VSCode автоматически устанавливает его в качестве среды Python по умолчанию для этого проекта. При работе с Poetry в первый раз нам нужно будет ввести следующее в терминале, находясь в папке проекта:
poetry shell
code .
Первая команда, poetry shell, запустит нас внутри нашего виртуального окружения, а code . откроет текущую папку в VSCode.

Откройте папку how-long (или ту, что соответствует имени вашего проекта) с помощью левой панели и рядом с __init__.py создайте файл how-long.py. В левом нижнем углу вы увидите текущую среду Python:

Нажмите на нее, и отобразится список доступных сред. Выберите ту, в названии которой есть имя вашего проекта:

Теперь давайте интегрируем наши зависимости для разработки, Flake8, Black и Pytest, в Visual Studio Code.
Flake8
Flake8 предоставит нашим проектам возможности linting. Другими словами, он будет предупреждать о синтаксических ошибках и ошибках стиля, и благодаря VSCode мы будем видеть их по мере набора текста.
По умолчанию расширение Python поставляется с включенным Pylint, который мощный, но сложный в настройке. Чтобы переключиться на Flake8, внесите изменение в любой файл Python и сохраните его. В правом нижнем углу появится всплывающее сообщение:

Нажмите Select Linter и выберите Flake8 из списка. Теперь VSCode будет сообщать нам о проблемах с синтаксисом и стилем, зеленым или красным цветом в зависимости от серьезности, всегда с хорошим описанием того, что не так:

Похоже, у нас две проблемы: нам не хватает пустой строки в конце файла (стиль) и мы забыли добавить кавычки к нашей строке Hello, World! (синтаксис). Исправьте их и посмотрите, как исчезнут все предупреждения.
Black
Black — это форматер кода, инструмент, который просматривает наш код и автоматически форматирует его в соответствии с руководством по стилю PEP 8, тем же PEP, который Flake8 использует для проверки ошибок стиля.
Нажмите shift + cmd/ctrl + p, чтобы открыть Command Palette, введите Format Document и нажмите Enter. Появится новое всплывающее сообщение:

Выберите Use Black. Теперь скопируйте этот плохо отформатированный код в ваш файл Python:
for i in range(5): # this comment has too many spaces
print(i) # this line has 6 space indentation.
Какая уродливая с***… часть кода. Попробуйте отформатировать его еще раз и посмотрите, как Black исправит все ошибки для вас!
Еще одна вещь, которую мы можем сделать, это настроить VSCode так, чтобы Black автоматически форматировал наш код каждый раз при сохранении. Нажмите cmd/ctrl + ,, чтобы открыть Настройки (Settings). Убедитесь, что вы находитесь в Workspace Settings, найдите Format On Save и активируйте флажок:

Наконец, Black по умолчанию использует 88 символов на строку, в отличие от 80, разрешенных Flake8, поэтому, чтобы избежать конфликтов, откройте папку .vscode и добавьте следующее в конец файла settings.json:
{
...
"python.linting.flake8Args": [
"--max-line-length=88"
],
}

Pytest
Если вы серьезно относитесь к программированию, крайне важно научиться тестировать свои проекты. Это невероятно полезный навык, который позволяет писать и поставлять программы с уверенностью, уменьшая вероятность появления катастрофических ошибок после выпуска.
Pytest — очень популярный и удобный фреймворк для написания тестов. Мы уже установили его, поэтому мы также интегрируем его с VSCode.
Откройте папку tests и выберите файл test_how_long.py. Poetry уже предоставляет нам первый тест:
# test_how_long.py
from how_long import __version__
def test_version():
assert __version__ == '0.1.0'
В этом тесте мы импортируем переменную __version__ из файла __init__.py, который находится внутри папки how_long, и утверждаем, что текущая версия — 0.1.0. Откройте интегрированный терминал, перейдя в Terminal > New Terminal, и введите:
pytest
Вывод будет выглядеть так:

Хорошо, все в порядке. Откройте Command Palette с помощью shift + cmd/ctrl + p:
- Введите unit и выберите Python: Configure Unit Tests.
- Выберите pytest.
- Выберите каталог, в котором вы сохранили тесты, в нашем случае tests.
Произошли три вещи:
На панели состояния появилась новая кнопка: Run Tests. Это то же самое, что ввести pytest в терминале. Нажмите на нее и выберите Run All Unit Tests. По завершении она сообщит вам количество пройденных и не пройденных тестов:

Новый значок на левой панели. Если нажать на него, появится панель со всеми тестами. Здесь вы можете запускать каждый из них по отдельности:

Внутри файла теста перед каждой тестовой функцией появятся новые опции: значок галочки, если все в порядке, и x, если нет. Это также позволяет запускать определенные тесты:

Заключение
К настоящему моменту мы:
- Запустили новый проект, создали виртуальное окружение, а также добавили, удалили и обновили зависимости.
- Добавили наше виртуальное окружение в VSCode, настроили Flake8 для линтования нашего кода по мере набора, выбрали Black в качестве форматера и включили Pytest для визуального запуска наших тестов.
Наконец, в третьей и последней статье мы будем:
- Писать пример библиотеки.
- Собирать наш проект с помощью Poetry.
- Публиковать его на PyPI.