Как стать автором
Обновить

Мелкая питонячая радость #3: Poetry

Время на прочтение2 мин
Количество просмотров35K


Управление зависимостями? Шо, опять?


Экосистема Python породила целую пачку способов управления зависимостями в проектах.
Прямо сейчас можно выбирать между setup.py, requirements.txt, setup.cfg, MANIFEST.in и Pipfile.
Но французского питониста Sébastien Eustace все эти способы не устроили, и он написал свою штуку для менеджмента питонячих пакетов — Poetry. Зачем он это сделал? Чтобы заменить все эти setup.py, requirements.txt, setup.cfg, MANIFEST.in и Pipfile чем-то простым и понятным. Плюс добавить кое-что полезное сверху.


image


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


Poetry лучше всего работает в паре с pyenv — системой управления множественными версиями Python и виртуальными окружениями.


Щупаем


Засучим рукава и посмотрим, как poetry работает в деле. Первым делом ставим pyenv, следуя официальной инструкции в доках.


# Обновляем pyenv, если он у вас не первой свежести
$ pyenv update

# Смотрим и выбираем версию Python для использования в проекте
$ pyenv install -l

# Ставим нужную версию языка, если у вас ее еще нет
$ pyenv install 3.7.3
# Маководы могут словить проблем с zlib, придется заюзать команду 
# CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install 3.7.3

# Прописываем нужный интерпретатор и привязываем его к текущей папке
$ pyenv local 3.7.3

# Ставим poetry
$ pip3 install poetry

# Конфигурим новый проект
$ poetry init
# Poetry задаст несколько вопросов и по итогу напишет файл pyproject.toml, в котором пропишет все настройки проекта

# Добавим пару пакетов в проект. Пакеты будут доступны только в виртуальное среде, которая сейчас активна в текущей папке.
$ poetry add flask celery
# Poetry все поставит и пропишет зависимости в pyproject.toml

# Если у вас есть пакеты, которые не поставить через PIP (например, кусок кода от другого подразделения вашей конторы), можно добавить зависимость вручную
$ poetry add my-package --path ../my-package/

# Посмотрим установленные зависимости в красивом виде
$ poetry show

# Теперь можно запускать команды в виртуальной среде Python 
$ poetry run python
#  Мы только что запустили интепретатор Python из нашей среды, в нем уже доступны flask и celery, которые мы поставили ранее.

Среда установлена и настроена, зависимости управляются одним пальцем, можно пилить код!


У вас, скорее всего, появятся в проекте команды запуска сервера, воркеров, скриптов деплоя и тестирования. Их можно засунуть в pyproject.toml и тоже рулить ими одним пальцем.


Добавляем в файл


my-script = "my_module:main"

и теперь можно запускать скрипт командой


poetry run my-script

Зачем это все?


Потратив десяток минут на освоение этой штуки, вы сэкономите время и нервы на управлении версиями языка и пакетов, отслеживании зависимостей и настройке путей. Особенно это поможет тем, кто хоть раз пробовал опубликовать свои наработки в pip :)


  • Резолвер зависимостей, способный всегда найти решение конфликтам версий пакетов (если оно вообще существует)
  • Автоматическое создание изолированных сред для запускапроектов.
  • Приятная консольная утилита, которая здорово упрощает запуск, тесты и деплой проектов.

Poetry прекасно дружит с другими управлялками виртуальными средами, так что интегрировать новый подход в старые проекты будет очень легко.

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+20
Комментарии12

Публикации

Изменить настройки темы

Истории

Работа

Data Scientist
60 вакансий
Python разработчик
132 вакансии

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн