Вы устали от ручной сборки и развертывания пакетов Python в PyPI? В этой статье рассмотрим автоматизацию с помощью GitHub Action.
Что нам понадобиться?
Вам нужно:
- Учетная запись GitHub.
- Каталог PyPI.
- Пакуемый проект Python
Пошаговый алгоритм
Перейдите в репозиторий, содержащий ваш проект Python.
Затем откройте вкладку «Actions» — «Действия», там появится окно:
Выберите действие «Publish Python package» — «Опубликовать пакет Python»:
Обратите внимание, что новый файл, который я фиксирую, находится в папке «.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», запущенных в моем пакете:
Затем, после настройки 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 в PyPI порядком поднадоело, я давно искала с помощью чего можно автоматизировать. И очень рада, что нашла эту статью. Все описано пошагово подробнейшим образом с наглядным пособием, спасибо автору. После прочтение этой статьи даже чайник разберется как автоматизировать сборку и развертывание пакетов с помощью GitHub Action.
🙂