arutema47's blog

書いたり書かなかったり。

Github Actionsでpypiのパッケージを発行

なぜgithub actionsで発行できると楽か

f:id:aru47:20201108162012p:plain

自作ライブラリ開発しているとすると普通ならコーディング、setup.pyを記述、pypiにtwineでアップロードという流れになります。 blog.amedama.jp

ただこのpypiへのアップロードが意外に面倒くさい。。!毎回pypiアカウントの認証などしなくてはならず、ライブラリ発行が億劫になるため出来るなら自動化したいものです。

Github actionsを使うとgithub上でリリースを追加することで自動的にpypiにアップロードすることができ非常に便利だったのでその方法を記述します。

やってみた

他レポの見様見真似でやってみた。

Pypiに書いてあるフローは以下であるが、微妙に今回参考にした設定とは異なる。

https://packaging.python.org/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/

今回用いたライブラリは自分で開発しているkaggle用TTAライブラリであるodachです。

github.com

Github actionsの設定ファイルを追加

レポ下に.github/workflows/python-publish.yml

を追加します。

# https://github.com/kentaroy47/ODA-Object-Detection-ttA/blob/main/.github/workflows/python-publish.yml
name: Upload Python Package

on:
  release:
    types: [created]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.x'
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install setuptools wheel twine
    - name: Build and publish
      env:
        TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
        TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
      run: |
        # ソース配布型
        python setup.py sdist bdist_wheel
        twine upload dist/*

Pypiの認証情報をSecretsに追加

レポジトリのSettings以下のSecretsにpypiの認証情報を追加します。

PYPI.PASSWORDPIPY.USER_NAMEにそれぞれpypiのユーザ、パスワードを格納します。secretsの情報は管理者しか見られないため安心です。

f:id:aru47:20201108161856p:plain

Githubにリリースを追加

ここまででgithub actionsの準備は整いました。releaseを追加すればactionが走り、その結果をActions以下で確認できます。

f:id:aru47:20201108162144p:plain

無事に走ればpypiにもパッケージが追加されているのを確認できます。

pypi.org

f:id:aru47:20201108162311p:plain