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 installpoetry install --no-devбез деваpoetry install --remove-untracked- не ставить то, что не трекается в lockpoetry install --extras "mysql pgsql"включить экстра зависимостиpoetry install -E mysql -E pgsqlpoetry 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версия requireddescriptionrequiredlicenseauthorsrequiredmaintainersreadmehomepagerepositorydocumentationkeywordsclassifierspackages- список пакетов и модулей, включаемых в финальную версиюincludeandexclude- список паттернов, которые необходимо включить в финальный проектdependenciesanddev-dependenciesscriptsскрипты, которые необходимо выполнить при инсталяцииextrasопциональные зависимостиpluginsurls
Пример реализации проекта на 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]
Смотри еще: