Установка менеджера зависимостей Poetry

Poetry – это инструмент для управления зависимостями Python, который способен собирать и упаковывать ваши проекты Python для распространения. Он поставляется с утилитами для поддержки согласованности и изолированности виртуальных сред. Кроме этого, в нем есть утилиты для интеграции с рабочими процессами, которые используют другие формы управления зависимостями, например requirements.txt.

В этом мануале мы установим Poetry с помощью официального скрипта установки, создадим проект Poetry с виртуальным окружением, а затем добавим и установим зависимости проекта.

Требования

Нам понадобится:

1: Установка Poetry

Poetry устанавливается с помощью официального скрипта, который есть на сайте. Эта команда загрузит скрипт установки, а затем запустит установку Poetry. Хотя эта статья предназначена для сервера Ubuntu, установочный скрипт можно запустить в Linux, macOS и Windows с WSL (подсистема Windows для Linux), которую можно установить с помощью этого мануала. Введите следующую команду:

curl -sSL https://install.python-poetry.org | python3 -

Poetry (1.2.1) is installed now. Great!

To get started you need Poetry's bin directory (/home/8host/.local/bin) in your `PATH`

environment variable.

Add `export PATH="/home/8host/.local/bin:$PATH"` to your shell configuration file.

Alternatively, you can call Poetry explicitly with `/home/8host/.local/bin/poetry`.

После завершения установки Poetry предложит добавить каталог bin в PATH для того, чтобы разрешить доступ к poetry в командной строке. В Ubuntu это можно сделать, открыв файл ~/.bashrc с помощью nano или другого текстового редактора:

nano ~/.bashrc

Добавьте эту строку в конец файла:

export PATH="/home/8host/.local/bin:$PATH"

Сохраните и выйдите из файла, в nano это можно сделать, нажав CTRL+X, для выхода, и Y сохранения изменений.

Затем примените изменения к текущему сеансу:

source ~/.bashrc

Чтобы убедиться, что команда poetry доступна, и отобразить её текущую версию, введите следующее:

poetry --version

Получаем вывод:

Poetry (version 1.2.1)

Poetry успешно установлен и теперь можно приступить к настройке проекта.

2: Настройка проекта Poetry

Начнём с создания нового проекта Poetry. Этот проект будет с виртуальной средой, c помощью неё мы будем устанавливать и управлять зависимостями. Мы назовем проект 8host_poetry, но вы можете выбрать любое другое имя.

poetry new 8host_poetry

Затем перейдите в новый каталог проекта:

cd 8host_poetry

Теперь новый проект Poetry с необходимыми шаблонами создан. С помощью команды Is можно посмотреть только что созданные файлы проекта:

ls

Получаем такой вывод:

README.md  dist  pyproject.toml  8host_poetry  tests

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

poetry init

Эта команда создаст все необходимые файлы в существующем проекте, и вы сможете продолжить работу над мануалом, как если бы это был новый проект.

3: Добавление зависимостей

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

nano pyproject.toml

[tool.poetry]
name = "8host-poetry"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
readme = "README.md"
packages = [{include = "8host_poetry"}]

[tool.poetry.dependencies]
python = "^3.10"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

Вместе с зависимостями, которые перечислены в tool.poetry.dependencies, в tool.poetry также есть и метаданные. Настройте эти метаданные в соответствии с информацией о вас – имя, адрес электронной почты и описание проекта. Блок build-system пока можно оставить без изменений. Сейчас он содержит особенности того, как Poetry будет собирать ваши пакеты.

Отметим, что Python 3.10, хотя и является последней версией, может быть требователен к ресурсам и это может стать проблемой в зависимости от системы. Большинство библиотек Python требуют как минимум версию 3.8. Привязка версий будет рассмотрена в 4 пункте этой статьи, если вы хотите изменить версию Python, которую проект использует в качестве зависимости.

Сейчас у проекта нет никаких зависимостей, кроме самого Python. Poetry может добавлять новые зависимости в проект прямо из командной строки. С помощью команды poetry add менеджер добавит строку зависимости в блок tool.poetry.dependencies и тем самым установит зависимость.

Просмотрев файл pyproject.toml, выйдите из редактора. В качестве примера мы попробуем добавить популярную HTTP-библиотеку Python requests в зависимости вашего проекта, а также установим её с помощью команды add. Эта библиотека позволяет отправлять HTTP-запросы с минимальным шаблонным кодом и полезна для приложений, которые взаимодействуют через HTTP. Введите следующую команду:

poetry add requests

Получаем такой вывод:

Creating virtualenv 8host-poetry-i9Ouy_MV-py3.10 in /home/8host/.cache/pypoetry/virtualenvs
Using version ^2.28.1 for requests

Updating dependencies
Resolving dependencies... (0.3s)

Writing lock file

Package operations: 5 installs, 0 updates, 0 removals
  •  Installing certifi (2022.9.24)
  •  Installing charset-normalizer (2.1.1)
  •  Installing idna (3.4)
  •  Installing urllib3 (1.26.12)
  •  Installing requests (2.28.1)

Кроме добавления в файл pyproject.toml и установки requests, команда add также выполняет инициализацию виртуальной среды. Помимо того, у requests есть свои зависимости. Poetry автоматически устанавливает все эти зависимости перед установкой самого requests.

Ваш файл pyproject.toml будет обновлен следующим образом:

[tool.poetry.dependencies]
python = "^3.10"
requests = "^2.28.1"

Это гарантирует, что библиотека requests всегда будет установлена. Символ ^ показывает минимальную  версию для установки, также поддерживаются и поздние версии.

4: Удаление и закрепление зависимостей

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

Warning: poetry.lock is not consistent with pyproject.toml. You may be getting improper dependencies. Run `poetry lock [–no-update]` to fix it.

С помощью команды poetry remove можно удалить зависимость или изменить её версию. Отредактировать файл pyproject.toml можно вручную, но нужно учитывать lock file и вручную активировать виртуальную среду. Поэтому, когда изменяете версию requests в сценарии, нужно сначала удалить библиотеку с помощью этой команды:

poetry remove requests

Получаем следующий вывод:

Updating dependencies
Resolving dependencies... (0.1s)

Writing lock file

Package operations: 0 installs, 0 updates, 5 removals
  •  Removing certifi (2022.9.24)
  •  Removing charset-normalizer (2.1.1)
  •  Removing idna (3.4)
  •  Removing requests (2.28.1)
  •  Removing urllib3 (1.26.12)

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

В качестве примера давайте привяжем не самую свежую версию request, которая не используется по умолчанию при выполнении команды add. Вместо этого привяжем его к версии 2.26.0 (более ранний действующий релиз, как показано в истории PyPI request):

poetry add requests@2.26.0

Получаем следующий вывод:

Updating dependencies
Resolving dependencies... (0.3s)

Writing lock file

Package operations: 5 installs, 0 updates, 0 removals
  •  Installing certifi (2022.9.24)
  •  Installing charset-normalizer (2.0.12)
  •  Installing idna (3.4)
  •  Installing urllib3 (1.26.12)
  •  Installing requests (2.26.0)

Теперь в файле pyproject.toml вы найдете:

[tool.poetry.dependencies]
python = "^3.10"
requests = "2.26.0"

Это указывает, что менеджер всегда будет устанавливать requests в версии 2.26.0.

Подводим итоги

В этой статье мы установили менеджер зависимостей Poetry и создали проект. Также мы добавили в него зависимости, а потом установили эти зависимости в виртуальной среде. А ещё мы удалили зависимость, прежде чем добавить ее в качестве прикрепленной зависимости в свой проект.

Tags: , ,

Добавить комментарий