Я использую Poetry уже пару месяцев, и он мне очень помогает. Больше не нужно беспокоиться о случайных подзависимостях в requirements.txt, настройке виртуального окружения и тому подобных вещах.
Но самое инновационное, что я вижу в poetry — это возможность быстро создать либу на python. Это помогает создавать простые помощники для интеграции в другие приложения для многих целей.
В этой статье я покажу, как создать проект poetry-python, сделать его как lib, опубликовать и установить их, без pypi. Только вы и ваш репозиторий!
Установка поэзии
pip install poetry
Если вы используете vscode, настройте поэзию на создание виртуальной среды python в рабочем пространстве проекта для лучшей интеграции с IDE
poetry config virtualenvs.in-project true
Создайте проект с помощью поэзии
# Create the project root folder and open vscode into it
poetry new my-hello-world-lib && code $_
# Or create the root folder and initialize the project after
mkdir my-hello-world-lib && cd $_ && poetry new . && code .
Рабочая область должна выглядеть следующим образом:
.
├── README.rst
├── my_hello_world_lib
│ └── __init__.py
├── pyproject.toml
└── tests
├── __init__.py
└── test_my_hello_world_lib.py
Вы должны обратить внимание на некоторые вещи:
- Весь экспортируемый код (код, доступный другим приложениям, которые установят либу) должен находиться в папке с тем же именем, что и проект (
my_hello_world_lib
). -
При написании lib (или любого другого приложения python) с несколькими модулями, я настоятельно рекомендую использовать абсолютные статические импорты.
Например: у вас есть два файла:
module_1.py
иmodule_2.py
.# ./my_hello_world_lib/module_1.py def add(number_one: int, number_two: int): return number_one + number_two
# ./my_hello_world_lib/module_2.py from my_hello_world_lib.module_1 import add # insteas of from . import import add import logging logger = logging.getLogger(__name__) def say_hello(): logger.info('hello world!') add(2, 2)
Используйте файл __init__.py для экспорта основных функций или классов вашей библиотеки
# ./my_hello_world_lib/__init__.py
from my_hello_world_lib.module_2 import say_hello
Опубликуйте свою первую версию
Источник истины вашего приложения остается в файле pyproject.toml
, который используется поэлементно для определения зависимостей производства и разработки приложения, имени проекта, версии python и других.
Для успешной установки lib вам может потребоваться добавить в этот файл некоторую информацию
[tool.poetry]
name = "my-hello-world-lib"
version = "0.1.0"
description = ""
authors = ["Your Name <your@email.com.br>"]
[tool.poetry.dependencies]
python = "^3.8"
[tool.poetry.dev-dependencies]
pytest = "^5.2"
[build-system]
# Add the setuptools to your build requirements
requires = ["poetry-core>=1.0.0", "setuptools>=40.8.0"]
build-backend = "poetry.core.masonry.api"
Инициализация git-репозитория
Теперь вы можете инициализировать ваш репозиторий
git init
Важно знать, что когда речь идет о репозитории, вы должны установить одну и ту же информацию о версии в разных местах: в файле pyproject.toml
и в теге коммита. Оба они должны быть синхронизированы.
Теперь ваше приложение готово к первой версии!
Поэзия может облегчить жизнь при версионировании проекта. Вы можете использовать команду cli для обновления версии.
poetry version patch #or minor, major, prerelease and some others
Вы можете прочитать больше о команде версий в poetry здесь
Теперь вам нужно убедиться, что версия есть в истории git.
Добавьте файл pyproject.toml в коммит и пометьте его тегом
git add pyproject.toml
git commit -m v$(poetry version -s) # prints out the project version
git tag v$(poetry version -s)
# Push the version information
git push origin master # Or your current branch
git push origin --tags # Push the tags
Вы можете сделать это быстро с помощью Makefile
.
version:
@poetry version $(v)
@git add pyproject.toml
@git commit -m "v$$(poetry version -s)"
@git tag v$$(poetry version -s)
@git push
@git push --tags
@poetry version
Затем просто используйте команду
make version v=<the version upgrade>
И готово! Вы опубликовали свою библиотеку в собственном репозитории!
Установка
Теперь, чтобы установить вашу библиотеку, вам просто нужно добавить зависимость, как и любую другую библиотеку, но используя ваш git url.
В url можно указать версию, которую нужно установить.
Пример:
poetry add git+https://github.com/LuscasLeo/my-hello-world-lib.git#v0.1.1
Бонус — Использование частных репозиториев
Если вы не хотите, чтобы ваш lib был публичным, вы можете легко использовать частный репозиторий для размещения вашего проекта. Вам просто нужно указать учетные данные, имеющие доступ к репозиторию в проекте, который будет использовать библиотеку:
# pyproject.toml
[tool.poetry.dependencies]
python = "^3.8"
my-hello-world-lib = {git = "https://<your username>:<your password>@github.com/LuscasLeo/my-hello-world-lib.git", rev = "v0.1.7"}