Публикация пакета Python с GitHub на PyPI в 2024 году
Это мой любимый метод публикации пакета в PyPI на сегодняшний день. Он использует новый метод Trusted Publisher от PyPI, который делает весь процесс очень простым.
Что здесь НЕ рассматривается: написание некоторого количества python и последующая установка его в качестве пакета. Вот несколько постов об этом:
- https://python-poetry.org/docs/basic-usage/ — как использовать поэзию, чтобы создать свой пакет для вас
- https://packaging.python.org/en/latest/tutorials/packaging-projects/ — как настроить проект на основе pyproject.toml
- https://drivendata.co/blog/python-packaging-2023 — тонкости настройки pyproject-toml
- https://pythonhosted.org/an_example_pypi_project/setuptools.htm — тонкости настройки pyproject-toml
Это предполагает, что у вас есть пакет python, установленный локально, вы знаете, как создать из него .whl-файл (вероятно, запустив python setup.py или python -m build), и хотите найти простой способ превратить его в пакет на PyPI, который другие смогут установить, а затем легко обновлять этот пакет по мере изменения вашего кода.
Step 1: Соберите компонент в виде пакета, включая setup.py/pyproject.toml
В этом посте я покажу пример публикации https://github.com/streamlit/gsheets-connection/, который в настоящее время использует setup.py для определения проекта.
Убедитесь, что имя пакета pypi, который вы планируете использовать, совпадает с именем вашего пакета в setup.py / pyproject.toml
Step 2: Создайте аккаунт на pypi.org, если у вас его еще нет
https://pypi.org/account/register/
Step 3: Создайте файл .github/workflows/publish.yml и зафиксируйте его в своем репозитории
name: Upload Python Package to PyPI when a Release is Created
on:
release:
types: [created]
jobs:
pypi-publish:
name: Publish release to PyPI
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/p/<PYPI_PACKAGE_NAME>
permissions:
id-token: write
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install setuptools wheel
- name: Build package
run: |
python setup.py sdist bdist_wheel # Could also be python -m build
- name: Publish package distributions to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
Обязательно измените PYPI_PACKAGE_NAME на то, как вы хотите, чтобы пакет назывался на pypi, что должно совпадать со значением имени в вашем pyproject.toml / setup.py
например. https://github.com/streamlit/gsheets-connection/pull/12/files
Step 4: Создайте новый “Отложенный издатель”.
https://pypi.org/manage/account/publishing/
Прокрутите вниз до “Добавить нового ожидающего издателя” и заполните имя проекта, владельца, имя репозитория и publish.yml, затем нажмите “Добавить”.
Подробности здесь: https://docs.pypi.org/trusted-publishers/creating-a-project-through-oidc/
Step 5: Создайте новый выпуск
На правой боковой панели github нажмите “Релизы”, а затем “Создать новый релиз”.
Посмотрите в setup.py или pyproject.toml и выясните текущий номер версии пакета. Например, 0.0.1
Нажмите “Выбрать тег”, введите v + номер версии (например, v0.0.1) и выберите “Создать новый тег при публикации”.
Нажмите на “Generate release notes”, чтобы автоматически сгенерировать заметки о релизе на основе того, какие PR были объединены с момента последнего релиза.
Нажмите “Опубликовать релиз”!
Step 6: Убедитесь, что релиз работает
Сначала зайдите на вкладку “Действия” в github и посмотрите, как выполняется действие “Загрузить пакет python…”.
Если все прошло успешно, вы должны увидеть пакет на pypi! (например. https://pypi.org/project/st-gsheets-connection/)