Posted on April 23, 2019· Updated on July 3, 2022

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

#python #intermediate #vscode #packaging
Image for Проекты на Python с Poetry и VSCode Часть 2 - Шпаргалка по Python

В первой статье мы узнали, что такое файл pyproject.toml и как с ним работать, использовали Poetry для запуска нового проекта, создания виртуального окружения, а также для добавления и удаления зависимостей. Все это с помощью следующих команд:

CommandDescription
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:

poetry update

На данный момент новых версий не найдено.

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

poetry shell
code .

Первая команда, poetry shell, запустит нас внутри нашего виртуального окружения, а code . откроет текущую папку в VSCode.

vscode

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

python version

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

choose python

Теперь давайте интегрируем наши зависимости для разработки, Flake8, Black и Pytest, в Visual Studio Code.

Flake8

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

По умолчанию расширение Python поставляется с включенным Pylint, который мощный, но сложный в настройке. Чтобы переключиться на Flake8, внесите изменение в любой файл Python и сохраните его. В правом нижнем углу появится всплывающее сообщение:

flake8

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

linting

Похоже, у нас две проблемы: нам не хватает пустой строки в конце файла (стиль) и мы забыли добавить кавычки к нашей строке Hello, World! (синтаксис). Исправьте их и посмотрите, как исчезнут все предупреждения.

Black

Black — это форматер кода, инструмент, который просматривает наш код и автоматически форматирует его в соответствии с руководством по стилю PEP 8, тем же PEP, который Flake8 использует для проверки ошибок стиля.

Нажмите shift + cmd/ctrl + p, чтобы открыть Command Palette, введите Format Document и нажмите Enter. Появится новое всплывающее сообщение:

black formatter popup

Выберите 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 и активируйте флажок:

format on save

Наконец, Black по умолчанию использует 88 символов на строку, в отличие от 80, разрешенных Flake8, поэтому, чтобы избежать конфликтов, откройте папку .vscode и добавьте следующее в конец файла settings.json:

{
    ...
    "python.linting.flake8Args": [
        "--max-line-length=88"
    ],
}

black-settings

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

Вывод будет выглядеть так:

pytest

Хорошо, все в порядке. Откройте Command Palette с помощью shift + cmd/ctrl + p:

  • Введите unit и выберите Python: Configure Unit Tests.
  • Выберите pytest.
  • Выберите каталог, в котором вы сохранили тесты, в нашем случае tests.

Произошли три вещи:

  • На панели состояния появилась новая кнопка: Run Tests. Это то же самое, что ввести pytest в терминале. Нажмите на нее и выберите Run All Unit Tests. По завершении она сообщит вам количество пройденных и не пройденных тестов:

    test status bar

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

    test side panel

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

    test inline

Заключение

К настоящему моменту мы:

Наконец, в третьей и последней статье мы будем:

  • Писать пример библиотеки.
  • Собирать наш проект с помощью Poetry.
  • Публиковать его на PyPI.