- Менеджер зависимостей Poetry — полный обзор от установки до настройки
- Содержание
- Что умеет Poetry
- Установка
- Установка на OSX и Linux
- Установка на Windows
- Установка через PIP и PIPX
- Работа с Poetry
- Создание проекта
- Pyproject.toml
- Установка пакета
- Удаление пакета
- Poetry и виртуальное окружение
- Конфигурация Poetry
- Список команд
- Сборка и настройка пакета
- Poetry и Docker
- Опубликовано Вадим В. Костерин
- Poetry: новый менеджер зависимостей в Python
- Установка
- Стартуем!
- Добавляем зависимости
- Сборка пакета
- Окружение
- Вывод
- 💌 Присоединяйтесь к рассылке
Менеджер зависимостей Poetry — полный обзор от установки до настройки
Poetry – это инструмент для управления зависимостями и сборкой пакетов в Python.
В Poetry представлен полный набор инструментов, которые могут понадобиться для детерминированного управления проектами на Python. В том числе, сборка пакетов, поддержка разных версий языка, тестирование и развертывание проектов.
Содержание
Все началось с того, что создателю Poetry Себастьену Юстасу потребовался единый инструмент для управления проектами от начала до конца, надежный и интуитивно понятный, который бы мог использоваться и в рамках сообщества. Одного лишь менеджера зависимостей было недостаточно, чтобы управлять запуском тестов, процессом развертывания и всем созависимым окружением. Этот функционал находится за гранью возможностей обычных пакетных менеджеров, таких как Pip или Conda. Так появился Python Poetry.
Что умеет Poetry
Ключевой фичей Poetry Python является полное управление библиотеками, заявленными для вашего проекта, включая их установку, обновление и публикацию.
А еще он может:
- Создавать и упаковывать проекты с помощью одной команды.
- Публиковать проекты в PyPI и приватных репозиториях.
- Проверять состояния зависимостей одной командой.
- Фиксировать версии зависимостей.
- Управлять публикацией билдов.
- Использовать настроенные виртуальные сервера или создавать собственное виртуальное окружение для полной изоляции от вашей системы.
Функционал командной строки расширяется с помощью плагинов, а предустановленные значения при необходимости легко заменяются на свои варианты. В целом, продукт имеет юзер-френдли интерфейс.
Установка
Poetry – кроссплатформенный инструмент. Теоретически он должен одинаково работать в Linux, MacOS и Windows. Системные требования предполагают использование актуальных версий Python, поэтому начиная с версии Poetry 1.2 не поддерживаются Python 2.7 и 3.5, будьте внимательны!
Poetry создает изолированное виртуальное окружение для вашего проекта, инсталлируя все необходимое и разруливая конфликты зависимостей (если они в принципе решаемы).
По умолчанию установка происходит в домашний каталог пользователя, но это можно изменить путем переопределения переменной окружения POETRY_HOME:
Установка на OSX и Linux
Этапы установки на Mac и Linux идентичны:
1. Проверить версию Python (в консоли python —version , и если версия Python по умолчанию 2.7, проверить python3 —version ).
2. Чтобы установить актуальную версию вводим в консоль:
Если дефолтная версия языка не устраивает или если для установки хочется воспользоваться версией питона 3.x, а по умолчанию стоит 2.7, используйте команду:
Обратите внимание: процесс установки может занять довольно длительное время.
Каталог bin, в который происходит установка инструмента, в Unix расположен в $HOME/.poetry/bin .
Установка на Windows
Для инсталляции Poetry:
1. Откройте Powershell ( Win + X далее i , или найдите PoweShell через поиск).
2. Введите команду:
Перезапустите оболочку и все заработает. Папку установки для Windows вы найдете в %USERPROFILE%\.poetry\bin .
Для корректной работы установщик должен иметь возможность найти исполняемые файлы py.exe -3 или py.exe -2.
Установка через PIP и PIPX
Для данного варианта установки необходимо иметь на борту менеджер пакетов PIP (или PIPX).
Для установки Poetry через PIP выполните команду:
Имейте ввиду, что зависимости пакета Poetry могут вызвать конфликт с уже установленными пакетами в вашей системе.
Команды Pipx для установки, обновления и удаления инструмента:
Pipx поддерживает только версии Python старше 3.6.
Работа с Poetry
Для начала убедимся, что Poetry корректно установлен, введя в терминал команду:
Если в ответ высветится актуальный номер версии, можно приступать к работе.
Перед работой с Poetry проверьте корректность установки командой «poetry —version»
Создание проекта
Создаем пробный проект и присваиваем ему название «project-poetry»:
Произойдет автоматическое создание папки проекта со следующей структурой:
В случае, если необходимо инициализировать Poetry-проект в уже существующем каталоге, перейдите в него и выполните команду:
Pyproject.toml
В файле pyproject.toml содержится описание вашего Poetry-проекта – название, описание, используемый репозиторий, зависимости проекта и т.д. С помощью него легко организовать зависимости вашего проекта ( pyproject.toml можно назвать преемником устаревшего requirements.txt ).
Если вы знакомы с Pipenv, то наверняка заметите, что pyproject.toml очень похож на Pipfile .
После инициализации проекта, содержание файла будет следующим:
Разберемся, что означает каждая секция:
- [tool.poetry] – содержит метаданные проекта, которые не относятся к пакетам зависимостей – название, описание, указание авторства и контактную информацию;
- [tool.poetry.dependencies] – раздел содержит зависимости, необходимые для проекта;
- [tool.poetry.dev-dependencies] – зависимости разработки (не войдут в сборку проекта, но необходимые для других аспектов – тестирования, документации и т. д.);
- [build-system] – если вы используете Poetry для управления своим проектом, вы должны ссылаться на него в этом разделе (команды new и init автоматически добавляют информацию в раздел build-system ).
📌 О дополнительных секциях файла можете прочитать в официальной документации The pyproject.toml file.
Все переменные могут задаваться вручную в соответствующие места Pyproject.toml , а также с помощью команды add или добавляться автоматически средствами Poetry.
Установка пакета
Теперь установим новый пакет в наш проект:
Результат выполнения команды установки пакета «poetry add»
После установки пакета, в pyproject.toml появится новая запись:
Для добавления dev-зависимости (зависимости для разработки) необходимо добавить флаг —dev: poetry add pytest —dev .
Удаление пакета
Для удаления пакета достаточно выполнить команду:
Для удаления пакета выполните poetry remove «имя_пакета»
При этом запись пакета также удалится из pyproject.toml .
Poetry и виртуальное окружение
По умолчанию, Poetry автоматически создает виртуальное окружение для вашего проекта в cache-директории:
- для Windows – C:\Users\ \AppData\Local\pypoetry\Cache\virtualenvs ;
- для Linux –
/.cache/pypoetry/virtualenvs ;
для macOS –
В эту директорию будут сохраняться все зависимости для проекта.
📌 Что такое виртуальное окружение и как оно работает можно прочитать тут.
Конфигурация Poetry
Конфигурация Poetry настраивается с помощью команды poetry config . После первого запуска команды, Poetry создаст файл конфигурации config.toml , в котором будут храниться все заданные параметры. Находится файл в директории:
- для Windows – C:\Users\ \AppData\Roaming\pypoetry ;
- для Linux –
/.config/pypoetry ;
для macOS –
Для примера, попробуем настроить Poetry так, чтобы он создавал виртуальное окружение virtualenvs не в cache-директории, а в корневом каталоге проекта. Для этого установим переменной virtualenvs.in-project значение true :
Чтобы убедиться, что значение успешно установилась, выполним команду:
Чтобы посмотреть все текущие параметры Poetry, используйте команду poetry config —list .
Теперь все зависимости будут устанавливаться в папку .venv в корне вашего проекта.
Если параметр нужно удалить, используйте флаг —unset :
📌 Подробнее о настройке конфигурации Poetry читайте тут.
Список команд
Poetry охватывает множество функций, связанных с управлением конфигурацией и публикацией пакетов:
- shell – при первом запуске этой команды в каталоге вашего проекта Poetry создает виртуальную среду Python, которая будет связана с проектом. Вместо создания папки, содержащей библиотеки зависимостей, Poetry создает среду на глобальном системном пути. Как только эта виртуальная среда будет создана, ее можно активировать в любое время, запустив poetry shell в каталоге проекта.
- install – устанавливает зависимости, указанные в pyproject.toml . При первой установке создается файл .lock , который содержит фактические номера версий каждого установленного пакета. Номера версий в .lock приоритетнее, чем находящиеся в pyproject.toml .
- update – если для пакетов в pyproject.toml существуют более новые версии, они будут установлены, и .lock файл будет обновлен.
- add – добавление зависимости к pyproject.toml . Пакет устанавливается сразу после применения команды.
- remove – удаление библиотеки зависимостей.
- config – пути к текущей виртуальной среде или ее переменные. Передача опции —list вернет текущие значения конфигурации.
- check – проверяет pyproject.toml на наличие ошибок.
- show – возвращает вывод всех пакетов, установленных в проекте, включая зависимости зависимостей.
- run – выполняет сценарий, заданный в разделе tool.poetry.scripts в pyproject.toml .
- build – собирает исходники и пакеты в архив.
- publish – публикует вывод предыдущей сборки во внешнем репозитории, например, в PyPi.
Чтобы получить справку из командной строки с полным списком команд, просто вызовите poetry .
Команда «poetry» выведет весь список доступных команд
Сборка и настройка пакета
Чтобы собрать пакет, запускаем команду build .
В результате в папке dist будут сформированы пакеты.
Результат сборки пакета находится «dist»
Если мы хотим ограничить сборку определенным типом, можно просто использовать параметр -F .
Чтобы развернуть пакет, нужно настроить репозитории и учетные данные. Для этого применяется команда config .
В примере происходит настройка репозитория с именем priv и Url-адресом https://my.repository .
Сохранить учетные данные для этого репозитория также можно с помощью команды config:
В приведенной команде user и password соответствуют имени пользователя и паролю для входа в наш частный репозиторий. Обратите внимание, если не указать пароль, то его будет предложено ввести при развертывании пакета.
Закончив настройку, мы можем просто развернуть пакет следующей командой:
Если использован частный репозиторий, следует указать его имя Priv с помощью опции -r .
Poetry и Docker
Использование Poetry для работы с проектом внутри Docker-контейнера иногда сопряжено со сложностями интеграции. Ключевым моментом является отключение VirtualEnv , так как он не нужен в уже изолированном докере:
Затем устанавливаются разные наборы зависимостей для переменной среды:
Таким образом в $MY_ENV будет контролироваться, какой набор зависимостей следует устанавливать: все (по умолчанию) или продакшн только с —no-dev флагом.
Poetry выходит далеко за рамки стандартного менеджера зависимостей, предлагая такие функции, как создание файлов .lock , создание шаблонов проекта и множество параметров конфигурации, каждый из которых обрабатывается через простой интерфейс командной строки. Если вы не знаете, как чисто и эффективно структурировать свои проекты Python и облегчить управление ими, сделайте себе одолжение и используйте Poetry.
Опубликовано Вадим В. Костерин
ст. преп. кафедры ЦЭиИТ. Автор более 130 научных и учебно-методических работ. Лауреат ВДНХ (серебряная медаль). Посмотреть больше записей
Источник
Poetry: новый менеджер зависимостей в Python
В последнее время в экосистеме Python часто стали появляться инструменты для управления зависимостями. Оно понятно, стандартный pip уже не отвечает современным требованиям: неудобная работа с зависимостями, много ручной работы при подготовке пакетов, проблемы при установке и обновлении и много чего другого.
С недавних пор я начал использовать новый менеджер под названием Poetry. Именно о нём сегодня пойдёт речь.
Функциональные возможности Poetry:
- Управление зависимостями через toml файл (прощай, requirements.txt)
- Автоматическое создание изолированного виртуального окружения Python (теперь не нужно для этого вызывать virtualenv)
- Удобное создание пакетов (отныне не нужно копипастить создавать setup.py каждый раз)
- poetry.lock файл для фиксирования версий зависимостей
А особенно радует тандем при работе с pyenv. О pyenv я писал три года назад.
Установка
Исходный код проекта лежит на github. Для установки необходимо выполнить команду:
Если установка прошла успешно, то убедиться в этом можно вызвав:
Стартуем!
Создаём новый проект my-demo-project:
Заходим в папку:
Poetry автоматически создал все необходимые файлы для будущего пакета, но наибольший интерес представляет файл с названием pyproject.toml, этот файл можно рассматривать как продвинутую альтернативу старичку requirements.txt. Взглянем на содержимое:
Формат файла TOML. Раздел tool.poetry предназначен для описания проекта: название, версия, краткая информация о проекте и т.д. Далее следует tool.poetry.dependencies, именно здесь будут указаны все production зависимости. Их можно указать вручную (привет, requirements.txt), но мы так делать не будем (привет, npm!). Раздел tool.poetry.dev-dependencies предназначен для зависимостей во время разработки (привет, pytest, tox!)
Добавляем зависимости
Давайте добавим к проекту зависимость в виде Luigi.
Обратите внимание, что Poetry автоматически создал виртуальное окружение через virtualenv при добавлении пакета (т.к. ранее оно не было создано). Все окружения находятся по пути
Если снова открыть pyproject.toml, то можно увидеть новую запись в разделе зависимостей:
Всю «грязную» работу за нас делает Poetry. Чтобы добавить зависимость для разработки достаточно указать флаг —dev:
Смотрим содержимое pyproject.toml ещё раз:
Чтобы удалить зависимость нужно выполнить:
Сборка пакета
Отныне забудьте про головную боль с ручным созданием setup.py, прописыванием туда всех зависимостей и запоминанием команд для сборки через pip. Всё стало в разы проще. Чтобы собрать python пакет выполните:
В папке dist будут сформированы пакеты. Чтобы поделиться своим творением с другими разработчиками, например через pypi, выполните:
Окружение
Для активации виртуального окружения необходимо выполнить команду:
Вывод
Проект Poetry появился 28 февраля 2018 года, последняя версия 0.12.8. Инструмент молодой, но перспективный и быстроразвивающийся. Уже сейчас он на голову выше старичка pip и по функциональным возможностям и по удобству использования. Советую вам его попробовать и поделиться мнением в комментариях к этой статье. За более подробной информацией об инструменте советую заглянуть на сайт с документацией.
💌 Присоединяйтесь к рассылке
Понравился контент? Пожалуйста, подпишись на рассылку.
Источник