Установка менеджера зависимостей Poetry
Development, Python | Комментировать запись
Poetry – это инструмент для управления зависимостями Python, который способен собирать и упаковывать ваши проекты Python для распространения. Он поставляется с утилитами для поддержки согласованности и изолированности виртуальных сред. Кроме этого, в нем есть утилиты для интеграции с рабочими процессами, которые используют другие формы управления зависимостями, например requirements.txt.
В этом мануале мы установим Poetry с помощью официального скрипта установки, создадим проект Poetry с виртуальным окружением, а затем добавим и установим зависимости проекта.
Требования
Нам понадобится:
- Сервер Ubuntu, настроенный по этому туториалу, с пользователем sudo и включенным брандмауэром.
- Последняя версия Python 3, установленная на компьютере в соответствии с разделом 1 мануала по установке Python.
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: Poetry, Python, Python 3