Posted at

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にリリースすることができます。

image.png

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