Публикация в PyPI¶
Пакет: instagram-edits-sdk. Импорт: edits_api. Публикацию может выполнять
владелец PyPI-проекта или настроенный им Trusted Publisher.
Первая публикация¶
Нужен аккаунт на PyPI с подтверждённой почтой и настроенной двухфакторной защитой. Пароль, коды восстановления и сессия аккаунта не должны попадать в репозиторий, Actions secrets или переписку.
На странице Publishing владельца добавляется pending publisher:
| Поле | Значение |
|---|---|
| PyPI project name | instagram-edits-sdk |
| Owner | lupikovoleg |
| Repository name | instagram-edits-sdk |
| Workflow name | publish.yml |
| Environment name | pypi |
Это разрешает workflow этого репозитория публиковать данный PyPI-проект. Настройку должен подтвердить владелец аккаунта. Постоянный PyPI API token не нужен. Pending publisher не резервирует имя проекта: оно закрепляется при успешной загрузке.
После настройки и проверки исходников создаётся тег, совпадающий с версией пакета:
git tag v0.2.2
git push origin v0.2.2
Тег запускает publish.yml. Workflow проверяет совпадение версии, запускает тесты, собирает sdist/wheel, проверяет метаданные Twine, устанавливает именно wheel в чистое окружение и только затем публикует два файла. OIDC-разрешение находится только у job публикации; постоянные токены не используются.
Следующие версии¶
Обновите версию в pyproject.toml, src/edits_api/__init__.py и changelog,
перегенерируйте OpenAPI и обновите номер версии в Swagger. После проверки и push
создайте соответствующий тег. Не изменяйте уже опубликованный тег/версию:
загрузки в PyPI не предназначены для перезаписи содержимого той же версии.
Локальная проверка:
python -m unittest discover -s tests -v
python tools/check_release.py
python -m build --outdir dist/pypi-0.2.2
python -m twine check --strict dist/pypi-0.2.2/*
Загружайте только файлы выбранной версии, а не все старые артефакты из dist.
Проверка после публикации¶
В новом окружении:
python -m venv /tmp/edits-pypi-check
/tmp/edits-pypi-check/bin/python -m pip install --index-url https://pypi.org/simple instagram-edits-sdk==0.2.2
/tmp/edits-pypi-check/bin/python -c 'from edits_api import EditsClient, Session; import importlib.metadata; print(importlib.metadata.version("instagram-edits-sdk"))'
/tmp/edits-pypi-check/bin/edits-api catalog
Официальные источники: создание проекта через Trusted Publishing, публикация.