Poetry
Poetry is a tool for dependency management and packaging in python. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you. Замена [requirements]
Выставляется изолированно от остальной системы для осуществления версионирования зависимостей. В линуксе:
После установки можно проверить что записалось в PATH. Если ничего, то прописать путь к poetry source $HOME/.poetry/env
. Проверит версию poetry --version
Basic usage
Project setup
poetry использует [toml] для конфигнов
poetry new poetry-demo
создает новый poetry project с названием poetry-demo. В нем:
poetry-demo
├── pyproject.toml
├── README.rst
├── poetry_demo
│ └── __init__.py
└── tests
├── __init__.py
└── test_poetry_demo.py
Здесб pyproject.toml
задает архитоектуру проекта и зависимости
[tool.poetry]
name = "poetry-demo"
version = "0.1.0"
description = ""
authors = ["Sébastien Eustace <sebastien@eustace.io>"]
[tool.poetry.dependencies]
python = "*"
[tool.poetry.dev-dependencies]
pytest = "^3.4"
Preinitialize project (шаблон проекта)
Размещаем файл .toml
в нужной папке и делаем инит
cd pre-existing-project
poetry init
Specifying dependencies
Специфические зависимости прописываются в томле
[tool.poetry.dependencies]
pendulum = "^1.4"
В секции tool.poetry.repositories
можно прописать репозитории, в которых poetry
будет искать зависимости. Дефолтный - [pypy]
Вместо ручной модификации, можно использовать poetry add pendulum
- зависимость будет найдена, добавлена в томл со всеми сабзависимости и в правильной ограничивающей версии.
Using your virtual environment
Окуржение poetry ставится в {cache-dir}/virtualenvs
.
Можно использовать poetry run
Примеры:
poetry run python your_script.py
poetry run pytest
Другой вариант - создать poetry shell
. Создание нового шела обязательно. Выйти можно через exit
или deactivate
не выходя из шела.
Третий вариант - запустить вручную: source {path_to_venv}/bin/activate
. Путь можно получить так: poetry env info --path
, соответственно одной командой: source`poetry env info –path`/bin/activate`
Installing dependencies
poetry install
в проекте
Если запускается впервые, то создается poetry.lock
и все ставится с нуля. Дальше poetry будет сверяться с lock и ставить только отсутствующие или измененные зависимости. Необходимо постоянно комитить лок систему контроля версий, чтобы обновлять версии для установки.
Если нужно установить только зависимости,то тогда poetry install --no-root
Публикация библиотек с poetry
Команды
Основное - это install. Инсталит из .toml
с учетом .lock
poetry install
poetry install --no-dev
без деваpoetry install --remove-untracked
- не ставить то, что не трекается в lockpoetry install --extras "mysql pgsql"
включить экстра зависимостиpoetry install -E mysql -E pgsql
poetry install --no-root
не инсталится рут-пкет (мой проект)
Апдейт зависимостей в .lock
через poetry update
. Можно заапдейтить только часть poetry update requests toml
Добавление необходимых зависимостей в .toml
через poetry add requests pendulum
- зависимости добавляются, затем инсталлируются.
Опции
--dev (-D)
: Add package as development dependency--path
: The path to a dependency--optional
: Add as an optional dependency--dry-run
: Outputs the operations but will not execute anything (implicitly enables –verbose)--lock
: Do not perform install (only update the lockfile)
Удалчерез poetry remove pendulum
. Посмотреть зависимости poetry show
Остальное смотри в доке.
Configuration
Repositories
Managing environments
Poetry работает всегда изолированно от глобального питона. При создании окружения poetry использует текущую активированную версию #python. Есть возможность переключаться между различными версиями python - подробнее
Решение проблемы с путями к питону в vs-code
poetry env info
инфа об окруженииpoetry env list
листинг окружений, ассоциированных с проектомpoetry env use python 3.8
использовать определенный питон
Окружения можно снести через delete
Спецификация зависимостей и их версий в .toml
Состав .toml
name
имя пакета (проекта) requiredversion
версия requireddescription
requiredlicense
authors
requiredmaintainers
readme
homepage
repository
documentation
keywords
classifiers
packages
- список пакетов и модулей, включаемых в финальную версиюinclude
andexclude
- список паттернов, которые необходимо включить в финальный проектdependencies
anddev-dependencies
scripts
скрипты, которые необходимо выполнить при инсталяцииextras
опциональные зависимостиplugins
urls
Пример реализации проекта на poetry Как использовать poetry на [heroku], [heroku-cli]
Еще материалы
How to update Poetry’s lock file without upgrading dependencies?
poetry lock --no-update
Как сделать энтри-поинт в проекте с poetry
Пример с [click]:
import click
@click.group()
def main():
"""packagename cli"""
@main.command()
def packagefunction():
"""packagefunction subcommand"""
[tool.poetry.scripts]
# command_name = module_for_handler : function_for_handler
<packagename> = '<packagename>:<main>'
Источник на оверфло. Еще примеры и еще. Здесь можно прочитать почему это может не работать..
Альтернатива: [poetrypoet]
Смотри еще: