Автоматизация сборки и развертывания пакетов Python

Автоматизация сборки и развертывания пакетов Python

Вы устали от ручной сборки и развертывания пакетов Python в PyPI? В этой статье рассмотрим автоматизацию с помощью GitHub Action.

Что нам понадобиться?

Вам нужно:

  • Учетная запись GitHub.
  • Каталог PyPI.
  • Пакуемый проект Python

Пошаговый алгоритм

Перейдите в репозиторий, содержащий ваш проект Python.

Затем откройте вкладку «Actions» — «Действия», там появится окно:

Alt Text

Выберите действие «Publish Python package» — «Опубликовать пакет Python»:

Alt Text

Обратите внимание, что новый файл, который я фиксирую, находится в папке «.github» и внутри папки «workflows».

.github/workflows/build-and-deploy.yml

Давайте посмотрим код, который представляет собой файл .yml, содержащий некоторые команды для выполнения:

name: Build and deploy Python package

on:
  release:
    types: [created]

jobs:
  deploy:

    runs-on: debian-latest

    steps:
    - uses: actions/checkout@v2
    - name: Install Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.x'
    - name: Setup all dependencies
      run: |
        python -m pip install --upgrade pip
        pip install setuptools wheel twine
    - name: Build package and publish PYPI
      env:
        TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
        TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
      run: |
        python setup.py sdist bdist_wheel
        twine upload dist/*

Позвольте мне объяснить строчку за строчкой:

name: Build and deploy Python package

on:
  release:
    types: [created]

«Name» — это имя рабочего процесса, который вы создаете.

«On» — изображает событие, которое здесь является событием релизов.

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

on
   push:
     branches : [ master ]

Здесь событие называется «Push», поэтому каждый раз, когда вы отправляете код, рабочий процесс запускается.

jobs:
  .....

«Jobs» сообщают рабочему процессу, что все задания должны быть выполнены при запуске рабочего процесса.

  deploy:

    runs-on: debian-latest

    steps:
    - uses: actions/checkout@v2
    - name: Install Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.x'

«Runs-on» указывает, на какой ОС (операционной системе) процесс должен выполняться.

«Steps» — это длинный список работ, которые нужно сделать.

Здесь первое задание «Job» состоит в настройке Python, а «Name» означает имя выполняемого задания.

Вот набор заданий «Jobs», запущенных в моем пакете:

Alt Text

Затем, после настройки Python, мы должны установить «Dependencies» — «Зависимости»:

    - name: Setup all dependencies
      run: |
        python -m pip install --upgrade pip
        pip install setuptools wheel twine

Здесь «Run: |» — это набор команд, которые должны быть выполнены.

Мы обновляем «pip». Устанавливаем зависимости из файла requirements.txt. Затем я загружаю установочные инструменты — «Wheel» и «Twine».

«Setuptools» и «Wheel» предназначены для упаковки.

«Twine» предназначен для загрузки пакета в PyPI.

Итак, заключительная часть для создания и публикации пакета:

    - name: Build package and publish PYPI
      env:
        TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
        TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
      run: |
        python setup.py sdist bdist_wheel
        twine upload dist/*

«Env» — это некоторые переменные окружения, которые вам нужны (здесь ваше имя пользователя и пароль PyPI)

Вы можете перейти в настройки репозитория и добавить их в разделе «Secrets», доступ к которым можно получить с помощью «secrets.envname».

В «Run: |» вы видите две команды.

«Python setup.py sdist bdist_wheel» создает пакет и добавляет его в папку «dist/*». И, наконец, «Twine upload dist/*» загружает дистрибутивы в PyPI.

Вы также можете настроить тесты, если хотите.

Надеюсь, я помог вам разобраться в этой теме!

Егор Егоров

Программирую на Python с 2017 года. Люблю создавать контент, который помогает людям понять сложные вещи. Не представляю жизнь без непрерывного цикла обучения, спорта и чувства юмора.

Ссылка на мой github есть в шапке. Залетай.

Оцените автора
Егоров Егор
Добавить комментарий

  1. Galina

    Действительно, ручная сборка и развертывание пакетов Python в PyPI порядком поднадоело, я давно искала с помощью чего можно автоматизировать. И очень рада, что нашла эту статью. Все описано пошагово подробнейшим образом с наглядным пособием, спасибо автору. После прочтение этой статьи даже чайник разберется как автоматизировать сборку и развертывание пакетов с помощью GitHub Action.

    Ответить
    1. Егор Егоров автор

      🙂

      Ответить