TravisCI が Python 3.4 をサポートしたので tox を叩く .travis.yml を更新する
更新
2014-05-05T17:15:00Z
GehirnInc/py3oauth2#1 を頂いて気づいたのですが、 TravisCI がサポートしているすべてのバージョンの Python に PATH が通っているようです。 ぼくがこの記事を執筆した時点では通っていなかったのですが、アップデートがあったようです。 そのためこの記事の寿命は終わりました。 よりシンプルに以下のようにするだけで、執筆時点の .travis.yml と同じようにビルドすることができます。
Python のバージョンを指定していないため、 TravisCI (Ubuntu 12.04) がデフォルトとしている Python 2.7 が使われますが、 tox は Python 2.7 でも動作し、 python3.x に PATH が通っているため、これで問題なくビルドできます。
language: python
env:
matrix:
- TOXENV="py33"
- TOXENV="py34"
- TOXENV="coverage"
install:
- pip install tox
- if test "$TOXENV" = "coverage"; then pip install coveralls; fi
script:
- tox
after_success:
- if test "$TOXENV" = "coverage"; then coveralls; fi
はじめに
おはようございます、 yosida95 です。
さて、最近の私は Gehirn で人権活動と称して、自分の人権を確保するために進捗を作る毎日を送っています。 以下に私の人権活動の履歴を示します。
これらのプロジェクトの共通点は、 Python 3k 向けのライブラリで GitHub にリポジトリを置き、 TravisCI でテストを行っていることです。
これまで TravisCI は、 Python 3k では Python 3.2 と Python 3.3 しかサポートしておらず、 Python 3.4 でテストするために sudo apt-get install python3.4 python3.4-dev を実行していました。 しかし、昨日 (4 月 30 日 ) の 11 時 (JST) 、ついに Python 3.4 のサポートが入りしました。
そこで、ネイティブの Python 3.4 を使ってテストを行うように .travis.yml を更新してみます。
.travis.yml
language: python
python:
- 3.3
- 3.4
env:
matrix:
- TOXENV="py33"
- TOXENV="py34"
- TOXENV="coverage"
matrix:
exclude:
# exclude 3.3
- python: 3.3
env: TOXENV="py34"
- python: 3.3
env: TOXENV="coverage"
# exclude 3.4
- python: 3.4
env: TOXENV="py33"
install:
- pip install tox
- if test "$TOXENV" = "coverage"; then pip install coveralls; fi
script:
- tox
after_success:
- if test "$TOXENV" = "coverage"; then coveralls; fi
まず前提ですが、テストは tox を使って蹴っています。 tox はそのままでは tox.ini の envlist に並べた env を全て実行するのですが、 TOXENV という環境変数をセットしてやると、特定の env のみを実行できます。
python にバージョンのリストを書いていますが、こうするとそれぞれのバージョンについて TravisCI がテストをとってくれます。 この場合では、 3.3 と 3.4 のそれぞれでテストが実行されます。
次に、 env.matrix に TOXENV を複数並べていますが、こうすることで TravisCI は python と env.matrix の全ての組み合わせについてテストを実行してくれます。 つまり、以下の 6 通りのテストが実行されます。
- python: 3.3, TOXENV="3.3"
- python: 3.3, TOXENV="3.4"
- python: 3.3, TOXENV="coverage"
- python: 3.4, TOXENV="3.3"
- python: 3.4, TOXENV="3.4"
- python: 3.4, TOXENV="coverage"
matrix.exclude
これまでの説明の通り 6 通りのテストが実行されるのですが、例えば python: 3.4 の時は python3.3 が見つからず、 python:3.4, TOXENV="3.3" のテストが落ちるという問題があります。
そもそも TravisCI は Python のバージョンごとに用意した virtualenv を activate してからテストを実行しており、 $VIRTHAL_ENV/bin とシステムデフォルトの Python にしか PATH が通っていません。
この問題を解決するために、テストを実行しなくてよい環境の組み合わせを .travis.yml の matrix.exclude に羅列していきます。 上記の例では TOXENV によるバージョンの指定と python が一致しない場合に加え、 python 3.4 以外での coverage の取得を exclude しています。