Рассмотрим более подробно работу с зависимостями силами poetry. Заданием прошлого урока было создание проекта с именем hello
, примеры из этого урока будут показаны применительно к этому проекту-примеру.
Добавим к проекту hello
зависимость: пакет colorama
— это популярная библиотека, позволяющая "раскрасить" выводимый в терминал текст. Это будет зависимость времени исполнения, а таковые добавляются следующим образом:
poetry add colorama
Using version ^0.4.4 for colorama
Updating dependencies
Resolving dependencies... (0.1s)
...
• Installing colorama (0.4.4)
Если теперь взглянуть на секцию tool.poetry.dependencies
файла pyproject.toml
, то там окажется следующее:
[tool.poetry.dependencies]
python = "^3.6"
colorama = "^0.4.4"
Как видите, colorama
не только была установлена в виртуальное окружение — это и pip
умеет делать — но ещё и появилась в списке зависимостей проекта. Любой, кто захочет запускать ваш код, получит все зависимости, сделав poetry install
— удобно!
Текст
"^0.4.4"
означает не одну лишь конкретную версию 0.4.4, но и все совместимые с указанной версией. Для "0.4.4" совместимыми будут считаться версии вплоть до "0.5.0". Так же версию можно указывать и строго конкретную, перечислить несколько конкретных допустимых версий или вручную указать диапазон. Всё это разнообразие описано здесь.
Удаляются зависимости командой poetry remove ИМЯ
— из pyproject.toml
удаляемые пакеты тоже убираются:
poetry remove colorama
...
• Removing colorama (0.4.4)
# проверим, упоминается ли colorama в конфигурации:
grep colorama pyproject.toml || echo ":("
:(
Когда ваш проект просуществует какое-то время, вы, возможно, захотите обновить какие-то зависимости. Этим занимается команда poetry update
.
Часто сам код менять не хочется, но есть желание получить только те самые "совместимые" свежие версии пакетов. Для такого сценария есть команда poetry update --lock
. Она проверит, какие из новых версий подходят под указанные в конфигурации версии, обновит lock-файл с учётом новых версий и установит обновления в виртуальное окружение.
Так как описание зависимостей в pyproject.toml
при выполнении poetry update --lock
не меняется, такое обновление можно считать вполне безопасным — ваш код сломаться не должен. Зато совместимые обновления, наверняка, исправят какие-то ошибки или уязвимости в используемых библиотеках.
Многие инструменты, полезные при разработке Python-проектов, в свою очередь также написаны на Python. При этом для запуска кода они, как правило, не требуются.
Возьмём, к примеру, IPython — он очень удобен, когда вы пишете код. Но конечному пользователю программы, которую вы написали, навязывать его было бы просто невежливо. Этот пакет имеет большой список собственных зависимостей, а значит их получит и пользователь! Такой "довесок" из набора инструментов разработки, применяемых в большом проекте, может занимать приличное количество места.
На радость нам, Poetry позволяет описать такие пакеты в виде списка dev-зависимостей. Они будут учтены при создании виртуального окружения, но к конечному пользователю не попадут.
Добавим IPython к проекту hello
в качестве dev-зависимости:
# Мы укажем точную версию IPython
# Свежий пакет требует Python 3.7+
poetry add --dev ipython==7.16.0
Using version ^7.16.0 for ipython
...
• Installing ipython (7.16.0)
Когда будете пробовать выполнить команду самостоятельно, обратите внимание на то, сколько пакетов фактически будет установлено вместе с затребованным нами ipython
!
Зато теперь можно запускать IPython вместо обычного REPL и наслаждаться всеми удобствами. Только нужно не забывать писать poetry run ipython
вместо ipython
— программа-то установлена в виртуальное окружение и снаружи "не видна"!
Стоит сказать, что poetry run
запускает не только команды из виртуального окружения — запускаются любые программы, но в контексте виртуального окружения. Скажем, с помощью системной программы which
можно узнать, где находится исполняемый файл IPython:
poetry run which ipython
/какой_там_у_вас_путь_до/hello/.venv/bin/ipython
colorama
как обычную зависимость в ваш локальный проект hello
.ipython
как dev-зависимость.from colorama import Fore
— импортирование должно пройти успешно.colorama
.Вам ответят команда поддержки Хекслета или другие студенты.
Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.
Загляните в раздел «Обсуждение»:
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Зарегистрируйтесь или войдите в свой аккаунт