Поиск по сайту:

Как установить 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 устанавливается с помощью официального установочного сценария, предоставленного при установке с помощью этого руководства. Введите следующую команду:

  1. 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 или предпочитаемого вами текстового редактора:

  1. nano ~/.bashrc

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

. . .
export PATH="/home/sammy/.local/bin:$PATH"

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

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

  1. source ~/.bashrc

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

  1. poetry --version
Output
Poetry (version 1.2.1)

Теперь у вас есть работающая установка Poetry, и вы можете приступить к настройке проекта Poetry.

Шаг 2 — Настройка поэтического проекта

Начните с создания нового проекта Poetry. Этот проект будет поставляться с виртуальной средой, которая будет использоваться при установке и управлении вашими зависимостями. В этом руководстве будет использоваться название проекта sammy_poetry, но вы можете выбрать любое другое имя.

  1. poetry new sammy_poetry

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

  1. cd sammy_poetry

Ваш новый проект Poetry с необходимыми шаблонными файлами теперь создан. Чтобы просмотреть только что созданные файлы проекта, используйте команду ls:

  1. ls
Output
README.md dist pyproject.toml sammy_poetry tests

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

  1. poetry init

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

Шаг 3 — Добавление зависимостей

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

  1. 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, хотя для целей этой демонстрации подойдет любой пакет. Введите следующую команду:

  1. poetry add requests
Output
Creating 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, сначала удалите ее с помощью этой команды:

  1. poetry remove requests
Output
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)

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

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

  1. poetry add requests@2.26.0
Output
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 и создали проект Poetry либо с нуля, либо в рамках существующего проекта. Вы также добавили к нему зависимости, а затем установили эти зависимости в виртуальной среде. Кроме того, вы удалили зависимость перед добавлением ее в качестве закрепленной зависимости в свой проект. Далее вы можете изучить дополнительные возможности Poetry с помощью этого руководства о том, как публиковать пакеты Python в PyPI с помощью Poetry в Ubuntu 22.04.