Создание и публикация lib для python с помощью poetry и git

Я использую 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"}
Войти в полноэкранный режим Выйти из полноэкранного режима

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *