TravisCIを使用して、タグ付きコミットのバージョン番号を付けたPythonパッケージをPyPIに自動的にリリースする


この記事では、TravisCIを使用して、タグ付きコミットのバージョン番号を付けたPythonパッケージをPyPIに自動的にリリースする方法について紹介します。パッケージのバージョンはコミットのタグによって自動的に決定されるため、setup.pyのパッケージのバージョンを書き換える手間を省くことができます。

必要なものは以下の通りです。

  • pythonパッケージを含むGitHubリポジトリ
  • Travisのコマンドラインツール
  • PyPIアカウント

設定ファイルを用意する

まず、Travis CIに何をすべきかを指示するために、リポジトリにTravisの設定ファイル(.travis.yml)を追加します。以下では、リポジトリをPython 3.6でビルドし、タグ付きコミットでのみデプロイするように設定します。userにはPyPIのユーザ名を設定しましょう。

language: python

python:
  - '3.6'

script: true

deploy:
  provider: pypi
  user: "Your username"
  on:
    tags: true

PyPIのパスワードを暗号化して設定ファイルに含める

次に、PyPIのパスワードを暗号化して設定ファイルに追加します。そのためには、Travisのコマンドラインツールを使うことができます。インストールしていない場合は、https://github.com/travis-ci/travis.rbを参考にしてインストールしてください。

まず、設定ファイルを置いてあるディレクトリに移動します。その後、次のコマンドを実行します。your-password-hereはPyPIのパスワードに置き換えてください。

travis encrypt your-password-here --add deploy.password

実行後、暗号化されたパスワードが設定ファイルに含まれていることを確認できます。

language: python

python:
  - '3.6'

script: true

deploy:
  provider: pypi
  user: "Your username"
  password:
    secure: "Your encrypted password"
  on:
    tags: true

タグ付きコミットから自動的にパッケージバージョンを設定

最後に、タグ付けされたコミットから自動的にパッケージのバージョンを設定します。こうすることで、パッケージのバージョンをsetup.pyにハードコーディングする必要がなくなります。

パッケージのバージョンをタグから自動的に設定するためにはsetuptools_scmを使うことができます。まずは、以下のようにしてsetuptools_scmをインストールします。

pip install setuptools-scm

次に、setup.pyを以下のように変更します。こうすることで、パッケージのバージョンを自動的にタグのバージョンから取得することができます。

from setuptools import setup
setup(
    ...,
    use_scm_version=True,
    setup_requires=['setuptools_scm'],
    ...,
)

これで終わりです。

あとはタグを付けることで、パッケージを自動的にPyPIにリリースすることができます。

以下のリポジトリに設定を書いてあるので参考にしてください。