Найти в Дзене

[Python] Грузим пакет в PyPI и настраиваем CI\CD

Эта статья является продолжением статьи Настраиваем CI в GitVerse и входит в цикл статей Пишем свою библиотеку с нуля и публикуем её в PyPI (GitVerse) В прошлой статье настроили CI в GitVerse. В этой статье мы сначала пакет соберём и руками загрузим его в PyPI GitVerse. А потом настроим автоматический процесс CI\CD. ОС: Windows 10 Язык: Python 3.14 Опираемся на официальную документацию Заходим в домашнюю папку: C:\Users\Пользователь Создаём файл .pypirc и заполняем данными по аналогии: Заходим в виртуальное окружение и устанавливаем нужные библиотеки cd bnkc venv\Scripts\activate py -m pip install build py -m pip install twine pip freeze > requirements.txt deactivate В разделе[project.optional-dependencies] добавим новый блок build build = [ "build>=1.4.0", "twine>=6.2.0", ] Указываем стандартный инструмент для сборки Python-пакетов. [build-system] requires = ["setuptools>=80"] build-backend = "setuptools.build_meta" Указываем, где искать Python-пакеты для включения в дистрибутив. [t
Оглавление

Эта статья является продолжением статьи Настраиваем CI в GitVerse и входит в цикл статей Пишем свою библиотеку с нуля и публикуем её в PyPI (GitVerse)

В прошлой статье настроили CI в GitVerse.

В этой статье мы сначала пакет соберём и руками загрузим его в PyPI GitVerse.

А потом настроим автоматический процесс CI\CD.

Используемые технологии

ОС: Windows 10

Язык: Python 3.14

Подготовка файла .pypirc

Опираемся на официальную документацию

Заходим в домашнюю папку: C:\Users\Пользователь

Создаём файл .pypirc и заполняем данными по аналогии:

-2

Устанавливаем зависимости

Заходим в виртуальное окружение и устанавливаем нужные библиотеки

cd bnkc
venv\Scripts\activate
py -m pip install build
py -m pip install twine
pip freeze > requirements.txt
deactivate

Дополним pyproject.toml

В разделе[project.optional-dependencies] добавим новый блок build

build = [
"build>=1.4.0",
"twine>=6.2.0",
]

Указываем стандартный инструмент для сборки Python-пакетов.

[build-system]
requires = ["setuptools>=80"]
build-backend = "setuptools.build_meta"

Указываем, где искать Python-пакеты для включения в дистрибутив.

[tool.setuptools.packages.find]
where = ["."]
include = ["bnkc*"]
exclude = ["tests*", "venv*", "*.egg-info*"]

Указываем, какие не-Python файлы включить в пакет.

[tool.setuptools.package-data]
"*" = ["py.typed"]

Зачем нужен этот файл, отсылаю к предыдущей статье этого цикла.

Исходники для билда

- 4925a14efe53b304bda2d9d4814df3cc6a6be176 - pytechnotes/bnkc - Gitverse

Собираем проект

py -m build

У вас должна сформироваться папка: \bnkc\dist

Грузим проект в PyPI

py -m twine upload --repository gitverse dist/*

Заходим в пользователя или, как в моем случае, в организации на GitVerse.

В разделе Пакеты должны увидеть свой пакет, который только что мы загрузили.

-3

Заходим в пакет. Нажимаем редактировать.

-4

И выбираем, в каком репозитории отображать пакет:

-5

Теперь наш пакет доступен для импорта:

pip install --index-url https://gitverse.ru/api/packages/pytechnotes/pypi/simple/ bnkc

ПОЗДРАВЛЯЮ вас с пакетом в PyPI на GitVerse!

и продолжим...

Делаем CI\CD

Вариантов, как настроить CI/CD, множество. Тут я сильно мудрить не буду.

Правим файл pyproject.toml

Нам надо либо удалить созданный ранее пакет из GitVerse. Либо имитируем, якобы у нас обновилась версия программы.

В файле pyproject.toml правим версию:

version = "2.0.0"

Можете указать любую версию: 1.0.1, 1.1.0 или, как я, 2.0.0. Это сейчас не имеет смысла.

Получается так: нам надо либо обновить версию, либо удалить ранее созданный пакет с той версией, которую мы будем грузить заново. Т.к. нельзя загрузить пакет с ранее залитой версией.

Добавляем файл .pypirc в проект

Ранее в этой статье мы создавали файл в домашней папке. Копируем этот файл в корень нашего проекта.

Правим файл \bnkc\.pypirc

Заменяем в файле пароль на запись:

password = ${PYPI_GITVERSE_TOKEN}

Вместо PYPI_GITVERSE_TOKEN вы можете выбрать любое другое слово.

Создаём секрет в GitVerse

Опираемся на официальную документацию

Открываем репозиторий — нажимаем «Настройки» — нажимаем «Секреты и переменные» — добавляем секрет.

-6

Добавляем секрет PYPI_GITVERSE_TOKEN и в значении указываем пароль от аккаунта (который указан в оригинальном файле .pypirc)

-7
-8

Создаем новый workflow

В папке \bnkc\.gitverse\workflows\ создаем новый файл publish.yaml (название может быть любым)

Указываем, что публикация будет происходить при двух условиях одновременно:

1) будет задан тег с версией

2) только при загрузке в ветку master

-9

Также указываем переменную с версией Python

И создаем job, в котором устанавливаем python, устанавливаем зависимости из файла pyproject.toml, собираем пакет, добавляем секрет в файл .pypirc и сохраняем файл по адресу ~/.pypirc, и с помощью twine грузим пакет в PyPI.

-10

Правим файл gitverse-ci.yaml

Давайте в файл gitverse-ci.yaml добавим новый job, который будет заранее производить сборку проекта и проверять, а не упадет ли build или twine.

-11

Отправляем изменения в репозиторий

Отправляем данные в удаленный репозиторий

git checkout -b dev
git add .
git commit -m "ci cd"
git tag -a v2.0.0 -m "v2.0.0"
git push -u origin dev --tags

Обратите внимание на новые команды. На этот раз мы добавляем теги к нашему коммиту

Открываем репозиторий в GitVerse — нажимаем на «Ветки».

-12

Нажимаем на пул-реквест.

-13

Оставляем всё как есть. Нажимаем «Создать запрос».

-14

Оставляем всё как есть и нажимаем «Создать коммит на слияние».

-15

Будут созданы два workflow

-16

По итогу в Пакета появится обновленная версия пакета

-17

Конечно, можно было бы лучше написать ci/cd, убрать дубли проверок, но это всё мелочи. Главное — показать принцип, а тонкая настройка у каждого своя на проекте.

На этом всё! Спасибо, что дочитали. :)

Только в README.md поправим, что библиотека устанавливается не как

pip install bnkc

а так

pip install --index-url https://gitverse.ru/api/packages/pytechnotes/pypi/simple/ bnkc

Исходники проекта

pytechnotes/bnkc: bnkc (bank calculator) - это удобная библиотека для расчета аннуитетных платежей по кредитам с поддержкой досрочных погашений. | Gitverse

Подписывайтесь на Дзен, а также приглашаю в мой телеграмм канал, там публикую другой, но не менее интересный контент.