Рассматривать сборку с использованием poetry будем на все том же тестовом проекте. Его полный код можно найти тут.
Удаляем все, что у нас было в __init__py, оставляя его абсолютно пустым.
Далее удаляем setup.py, он больше не нужен и вместо него в корень проекта добавляем pyproject.toml:
[tool.poetry]
name = "test_package"
version = "0.1.1"
description = "Test packages"
authors = ["Trusikhin Andrei"]
[build-system]
requires = ["poetry-core>=1.0.0", "poetry-dynamic-versioning>=1.0.0,<2.0.0"]
build-backend = "poetry_dynamic_versioning.backend"
[tool.poetry.dependencies]
python = ">=3.8"
pyyaml = "^6.0.0"
[tool.poetry.scripts]
cmd_test = "test_package.main:main"
[[tool.poetry.source]]
name = "gitlab_test_project"
url = "https://<you_gitlab_domain>/api/v4/projects/<CI_PROJECT_ID/packages/pypi"
Теперь наш requirements.txt будет выглядеть так:
PyYAML==6.0.1
poetry==1.7.1
Устанавливаем зависимости:
pip3 install -r src/requirements.txt
Устанавливаем зависимости через poetry:
poetry install
В корне проекта также появится файл poetry.lock с описанием зависимостей. Это привет из мира composer, nodejs и прочего, где также при установки генерируется .lock файл.
Уже сейчас мы можем запустить наш код вот так, без установки пакета в систему:
poetry run cmd_test
Чтобы собрать пакет, выполним:
poetry build
Как и в случае со сборкой через setuptools, пакет и архив будет лежать в директории dist.
У poetry есть отличный плагин для динамического управления версиями. Установить его можно так:
poetry self add "poetry-dynamic-versioning[plugin]"
Больше возможностей в официальной документации.
Я же обычно использую CLI poetry version, который становится доступен после установки плагина. Инструмент позволяет делать бамп версии в pyproject.toml без необходимости наличия дополнительных файлов, как это было в предыдущих статьях.
Пример использования:
poetry version prerelease
poetry version patch
Возможностей на самом деле больше, они все доступы по:
poetry version --help
Чтобы опубликовать пакет, нужно сначала добавить сертификат, если используется свой центр сертификации, а затем опубликовать пакет:
poetry config certificates.<имя из pyproject>.cert <path_to_certificate>
poetry publish --repository <имя из pyproject> -u <user> -p <pass>
Имя из pyproject.toml это то, что мы описывали вот тут:
[[tool.poetry.source]]
name = "gitlab_test_project"