Для управления зависимостями Python был создан специальный инструмент, цель которого – предварительно собрав и упаковав проекты, подготовить их к последующему распространению. Именно так работает Poetry, который можно отыскать вместе с утилитами, предназначенными для поддержки согласованности и изоляции виртуальных средств. Poetry довольно просто интегрируется с теми рабочими процессами, независимо от того, какие формы управления зависимости они эксплуатируют, в качестве примера можно привести requirements.txt.
Подобный функционал предполагает создание виртуальных средств, а потому установка его допустима в пользовательских или глобальной библиотеках, а не внутри самой виртуальной среды облачного сервера.
С помощью Poetry можно решить сразу несколько задач:
- создать новые проекты;
- выполнять управление зависимостью;
- упаковывать и публиковать библиотеки;
- инициализировать уже действующий проект с виртуальным окружением.
При создании нового проекта либо инициализации уже действующего Poetry позволяет в любой момент организовать новую виртуальную среду, активируя её в качестве альтернативы применения скриптов activate. Такое решение более удобно по сравнению с применением обычного модуля venv, так как исключает необходимость запоминать место хранения реальной виртуальной среды. Достаточно просто активировать оболочку.
Помимо этого меняются некоторые особенности управления зависимостями. Здесь следует учитывать, что файлы requirements.txt описывают все пакеты, что требуют установки, однако в автоматическом режиме их не отслеживают, а потому что именно было установлено в окружении в процессе разработки, узнать нельзя.
Если один программист установит что-либо при помощи pip, то другие уже столкнутся с проблемами, если потребуется воссоздать среду. Подобного можно избежать, используя Poetry. В этом случае способ добавления зависимости может быть только один – команда poetry add <имя пакета>. Таким образом, можно устанавливать все пакеты в виртуальную среду из дерева зависимости, сохранять внесённые изменения в специальном файле pyproject.toml, при наличии пакетов с общими зависимостями – разрешать целые деревья последних.
В библиотеках для конкретных зависимостей могут быть установлены нечёткие спецификаторы, а потому есть вероятность того, что в двух средах, созданных в разные даты, устанавливаются отличные друг от друга конечные версии пакетов. Последние могут быть более точными для всех переходных зависимостей, что является достаточно существенной проблемой крупных проектов с учётом того, что отслеживать их в файлах requirements.txt, делая это вручную, достаточно сложно.
Применение менеджера пакетов позволяет оперативно решить проблему, связанную с переходными зависимостями посредством использования специальных файлов блокировки. Речь идёт о создании особого файла poetry.lock, который выступает в качестве полноценного снимка процесса разрешения зависимостей и используется в дальнейшем с целью определения конкретных версий переходных зависимостей.
С добавлением пакетов при помощи команды poetry add менеджер обновляет файл poetry.lock по результатам оценки дерева зависимости. Подобный подход на сегодняшний день является наиболее надёжным.
Неспроста те, кто уже использовал такое решение, склонны считать, что оно выходит за пределы стандартного менеджера зависимостей, так как позволяет использовать функции создания файлов .lock, шаблонов проекта, а также применять многочисленные параметры конфигурации, обрабатываемые благодаря простому интерфейсу в командной строке. Подобный вариант подходит тому, кто до конца не умеет чисто и эффективно структурировать проекты, в такой ситуации Poetry следует использовать для того, чтобы значительно облегчить управление.