Установка Hatch (Python) в VSCode

Featured image

Вместо Pipenv, venv используем современный Hatch для работы с виртуальным окружением.

📖 Содержание ⬇️

Содержание

Первоначально эта статья должна была быть более подробной, так как хотел в своей деятельности перейти на Hatch, но по итогу перешел на Rye, так что тут только основное.

Ссылки

  • Hatch — документация.

Подготовка

Установка программ и создание папки для проектов

Разумеется, нужен Python. Если его нет, то смотрите статью Установка Python | ↗️.

Нужен VSCode. Если его нет, то смотрите статью Установка Visual Studio Code (простая) и открытие Markdown | ↗️.

Нужно расширение Python в VScode:

Установка расширения Python

Рисунок 1 — Установка расширения Python

Не забудьте перейти в раздел файлов:

Раздел Explorer

Рисунок 2 — Раздел Explorer

Создайте любым способом на компьютере папку, где будут располагаться проекты, например, C:\python-projects, если у вас еще нет папки для Python проектов (например, через команду mkdir C:\python_projects\ или просто через проводник). Через File → Open Folder... откройте эту папку (там тоже через окно открытия папки можно создать нужную папку):

Открытие папки

Рисунок 3 — Открытие папки

Вас спросят о том, доверяете ли вы авторам этой папки. Но ведь эту папку вы только что создали? Так что доверяем:

Подтверждение доступа к папке

Рисунок 4 — Подтверждение доступа к папке

И включите режим автосохранения, чтобы не забывать сохранять изменения в файле:

Режим Auto Save

Рисунок 5 — Режим Auto Save

Установка Hatch и создание проекта

Вызываем консоль Ctrl → ` (Ctrl → Ё), прописываем команду установки Hatch глобально (после ввода команды не забываем нажать Enter):

pip install hatch

Установка Hatch

Рисунок 6 — Установка Hatch

Успешная установка Hatch

Рисунок 7 — Успешная установка Hatch

Если команда не срабатывает, то попробуйте python -m pip install hatch. Если и это не сработает, то скорее всего неправильно установили Python.

Возможно, что вас попросят обновить pip через команду python.exe -m pip install --upgrade pip. Почему бы и нет (скриншот приведен из другого эксперимента с Hatch):

Обновление pip

Рисунок 8 — Обновление pip

Теперь можно создать проект для Hatch. Вместо Test Hatch введите имя своего проекта:

hatch new "Test Hatch"

Инициализация проекта

Рисунок 9 — Инициализация проекта

Итак, у нас из названия проекта Test Hatch создалась папка test-hatch. Обратите внимание, что в папке src создалась папка test_hatch, то есть сам проект для потенциальной публикации в Интернете вместо пробела вставляет дефис, а внутри для работы импорта внутри Python скриптов пробел заменяется на нижнее подчеркивание. Если вы назвали проект по другому, то и название папки будет другим.

Командой cd test-hatch переходим в эту папку проекта:

Переход в папку проекта

Рисунок 10 — Переход в папку проекта

Но лучше сразу откройте через File → Open Folder... вновь созданную папку C:\python-projects\test-hatch и откройте терминал Ctrl → ` (Ctrl → Ё):

Открытая папка проекта test-hatch

Рисунок 11 — Открытая папка проекта test-hatch

Если вы не откроете папку с проектом, то следующая команда по созданию виртуального окружения сработает на папку проектов, а не конкретного проекта.

Виртуальное окружение

Теперь нужно создать виртуальное окружение через команду:

hatch shell

Так как виртуальное окружение после создания сразу активируется, то у вас в терминале в круглых скобках должно появиться название окружения:

Созданное виртуальное окружение

Рисунок 12 — Созданное виртуальное окружение

Если вдруг это не произошло, и, например, появилась подобная ошибка, как на рисунке ниже, то вполне возможно ошибка с групповыми политиками:

Ошибка при активации виртуального окружения

Рисунок 13 — Ошибка при активации виртуального окружения

Одно из возможных вариантов решения проблемы:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted

Исправление ошибки активации виртуального окружения

Рисунок 14 — Исправление ошибки активации виртуального окружения

После этого перегрузите VSCode и в терминале вызовите опять hatch shell.

Созданное виртуальное окружение можно найти в папке %LOCALAPPDATA%\hatch\env\virtual, если это потребуется.

Теперь создадим main.py в папке scr/test_hatch. Например, для этого можно кликнуть на указанную папку правой кнопкой мыши, а затем выбрать New File...:

Выбор пункта создания нового файла

Рисунок 15 — Выбор пункта создания нового файла

Вводим имя файла main.py и нажимаем Enter:

Создание нового файла

Рисунок 16 — Создание нового файла

Теперь VSCode нужно объяснить, чтобы он запускал Python из нашего виртуального окружения. VSCode к сожалению сам найти его не может и запускает глобальную версию Python. Для этого щелкаем в панели внизу справа по глобальной версии Python, а затем выбираем пункт Enter interpreter path...:

Выбор Enter interpreter path

Рисунок 17 — Выбор Enter interpreter path

В папке %LOCALAPPDATA%\hatch\env\virtual находим папку с нашим виртуальным окружением и спускаемся в папку Scripts, где находится python.exe, полный путь которого и указываем:

Путь с Python интерпретатором

Рисунок 18 — Путь с Python интерпретатором

VSCode должен увидеть этот путь к интерпретатору:

Установка пути к интерпретатору

Рисунок 19 — Установка пути к интерпретатору

Если вы всё правильно сделали, то теперь внизу справа должно отображается имя вашего виртуального окружения:

Отображение выбранного виртуального окружения

Рисунок 20 — Отображение выбранного виртуального окружения

Теперь можем протестировать запуск какого-нибудь Python скрипта:

print(2+2)

Запускаем кнопкой запуска сверху справа:

Запуск Python кода

Рисунок 21 — Запуск Python кода

Если вы получили нужный вывод, то всё работает.

Часто возникает проблема, что запускается отдельный терминал, где работает не ваше виртуальное окружение, а глобальное. При этом вы не видите название виртуального окружения в круглых скобках:

Запуск кода не через ваше виртуальное окружение

Рисунок 22 — Запуск кода не через ваше виртуальное окружение

Да, пример print(2+2) сработает, но при работе с библиотеками будет выдаваться сообщение, что их нет.

Для решения можно прописать в новом терминале hatch shell, и заново запустить скрипт. Тогда запуск будет произведен в нужном виртуальном окружении:

Повторный вызов hatch shell

Рисунок 23 — Повторный вызов hatch shell

Добавление библиотеки

Как добавляются библиотеки и как происходит их установка? В отличии от других систем, тут не нужно в консоли прописывать команду наподобие pip install cowsay. В Hatch нужно просто прописать название библиотеки в файле pyproject.toml в разделе dependencies:

dependencies = [
  "cowsay"
]

Добавление библиотеки

Рисунок 24 — Добавление библиотеки

Например, в main.py напишем такой код:

import cowsay

cowsay.cow('Hello World')

Вначале он будет подчеркивать библиотеку как неустановленную:

Сообщение, что библиотека не установлена

Рисунок 25 — Сообщение, что библиотека не установлена

При запуске Python скрипта (или активации виртуального окружения) произойдет автоматическая установка библиотеки. Но так должно быть. Почему у меня так не получается, не до конца разобрался. Поэтому мне приходится после добавления библиотеки в файл pyproject.toml вначале выйти из виртуального окружения, а потом уже заново в него войти. Тогда синхронизация библиотек происходит:

exit
hatch shell

Установка библиотек через перезапуск виртуального окружения

Рисунок 26 — Установка библиотек через перезапуск виртуального окружения

Для примера добавил еще matplotlib в файл pyproject.toml:

dependencies = [
  "cowsay",
  "matplotlib"
]

Применил exit, hatch shell. Добавил код в main.py запустил такой код:

import cowsay

cowsay.cow('Hello World')

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-5, 5, 200)
y = x ** 2

fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()

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