Как установить Poetry для управления зависимостями Python в Ubuntu 22.04
Введение
Poetry — это менеджер зависимостей для Python, который также может создавать и упаковывать ваши проекты Python для распространения. В качестве диспетчера зависимостей он поставляется с инструментами для поддержания согласованности и замкнутости виртуальных сред. Кроме того, в нем есть инструменты для интеграции с рабочими процессами с использованием других форм управления зависимостями, таких как requirements.txt
.
В этом руководстве вы установите Poetry с помощью официального сценария установки, настроите проект Poetry с виртуальной средой, а затем добавите и установите зависимости вашего проекта.
Предпосылки
- Сервер Ubuntu 22.04, настроенный в соответствии с нашим руководством по первоначальной настройке сервера для Ubuntu 22.04, с пользователем без полномочий root с привилегиями
sudo
и включенным брандмауэром. - Последняя версия Python 3, установленная на вашем компьютере после выполнения шага 1 по установке Python 3 и настройке среды программирования на сервере Ubuntu 22.04.
Шаг 1 — Установка Поэзии
Poetry устанавливается с помощью официального установочного сценария, предоставленного при установке с помощью этого руководства. Введите следующую команду:
- curl -sSL https://install.python-poetry.org | python3 -
…
[secondary_label Output]
Poetry (1.2.1) is installed now. Great!
To get started you need Poetry's bin directory (/home/sammy/.local/bin) in your `PATH`
environment variable.
Add `export PATH="/home/sammy/.local/bin:$PATH"` to your shell configuration file.
Alternatively, you can call Poetry explicitly with `/home/sammy/.local/bin/poetry`.
…
После завершения установки Poetry предложит вам добавить каталог bin в ваш PATH
, чтобы разрешить использование poetry
в вашей командной строке. В Ubuntu с Bash это можно сделать, открыв файл ~/.bashrc
с помощью nano
или предпочитаемого вами текстового редактора:
- nano ~/.bashrc
Добавьте следующую строку в конец файла:
. . .
export PATH="/home/sammy/.local/bin:$PATH"
Сохраните файл и выйдите из него. С помощью nano
это можно сделать, нажав CTRL+X
для выхода и Y
для сохранения любых изменений.
Затем примените изменения к текущему сеансу:
- source ~/.bashrc
Чтобы убедиться, что команда poetry
теперь доступна, введите следующее, чтобы отобразить текущую версию Poetry:
- poetry --version
OutputPoetry (version 1.2.1)
Теперь у вас есть работающая установка Poetry, и вы можете приступить к настройке проекта Poetry.
Шаг 2 — Настройка поэтического проекта
Начните с создания нового проекта Poetry. Этот проект будет поставляться с виртуальной средой, которая будет использоваться при установке и управлении вашими зависимостями. В этом руководстве будет использоваться название проекта sammy_poetry
, но вы можете выбрать любое другое имя.
- poetry new sammy_poetry
Затем перейдите в новый каталог проекта:
- cd sammy_poetry
Ваш новый проект Poetry с необходимыми шаблонными файлами теперь создан. Чтобы просмотреть только что созданные файлы проекта, используйте команду ls
:
- ls
OutputREADME.md dist pyproject.toml sammy_poetry tests
Примечание. Если у вас есть существующий проект, который вы хотите использовать, вы можете использовать другую команду, чтобы Poetry распознал его как проект. Перейдите в каталог существующего проекта и введите следующую команду:
- poetry init
Это создаст все необходимые файлы в вашем существующем проекте, и вы сможете продолжить работу с этим учебным пособием, как если бы это был новый проект.
Шаг 3 — Добавление зависимостей
Прежде чем вы начнете добавлять зависимости в свой проект, вы начнете с проверки и понимания файла, который Poetry использует для хранения ваших зависимостей. В каталоге вашего проекта Poetry находится автоматически сгенерированный файл pyproject.toml
, содержащий список ваших зависимостей. Откройте и проверьте его со следующим:
- nano pyproject.toml
[tool.poetry]
name = "sammy-poetry"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
readme = "README.md"
packages = [{include = "sammy_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. Если вы хотите изменить версию Python, которую ваш проект использует в качестве зависимости, закрепление зависимостей версий будет рассмотрено на шаге 4 этого руководства.
В текущем состоянии ваш проект не имеет никаких зависимостей, кроме самого Python. Poetry может добавлять новые зависимости в ваш проект прямо из командной строки. С помощью команды poetry add
Poetry одновременно добавит строку зависимости в ваш блок tool.poetry.dependencies
и установит зависимость.
После проверки файла pyproject.toml
выйдите из редактора. Например, вы будете добавлять популярную HTTP-библиотеку Python, запросы, в зависимости вашего проекта, а также устанавливать ее с помощью команды add
. Эта библиотека позволяет отправлять HTTP-запросы с минимальным шаблонным кодом и полезна для приложений, взаимодействующих через HTTP, хотя для целей этой демонстрации подойдет любой пакет. Введите следующую команду:
- poetry add requests
OutputCreating virtualenv sammy-poetry-i9Ouy_MV-py3.10 in /home/sammy/.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 — Удаление и закрепление зависимостей
Чтобы обеспечить согласованность между вашими текущими установленными зависимостями и зависимостями, которые вы указали в файле pyproject.toml
, Poetry использует файл блокировки
. Poetry читает непосредственно из этого файла во время процесса установки, а это означает, что непосредственное редактирование файла pyproject.toml
для изменения ваших зависимостей может вызвать некоторые ошибки или предупреждения, такие как это:
Output. . .
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
возможно, вам придется учитывать файл блокировки
и вручную активировать виртуальную среду. Итак, если вы хотите изменить версию requests
, сначала удалите ее с помощью этой команды:
- poetry remove requests
OutputUpdating 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)
Теперь, когда requests
удален, вы можете снова добавить его в качестве закрепленной зависимости. С зависимостями часто вы хотите сохранить конкретную версию библиотеки для вашего проекта. Это часто происходит из-за проблем с совместимостью, поскольку библиотеки со временем меняются, и может быть полезно для обеспечения согласованности вашего проекта. Это называется закреплением зависимостей.
Например, вы прикрепите requests
к версии, отличной от последней, которая используется по умолчанию при выполнении команды add
. Вместо этого вы привяжете его к 2.26.0
, который является более ранним действительным выпуском, который можно найти в истории запросов
PyPI:
- poetry add requests@2.26.0
OutputUpdating 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 и создали проект Poetry либо с нуля, либо в рамках существующего проекта. Вы также добавили к нему зависимости, а затем установили эти зависимости в виртуальной среде. Кроме того, вы удалили зависимость перед добавлением ее в качестве закрепленной зависимости в свой проект. Далее вы можете изучить дополнительные возможности Poetry с помощью этого руководства о том, как публиковать пакеты Python в PyPI с помощью Poetry в Ubuntu 22.04.