2012年9月8日

Python 3.3 移行するならテスト環境を py.test と tox にすると便利

概要

予定通りに行けば、Python 3.3 が今月中にリリースされます。
現在は Python2 と Python3 は移行時期で、完全に Python3 に移行するのは難しいタイミングです。しかし、将来確実に Python3 に移行する必要が出てくるため、場合によっては、Python2 と Python3 両方で動作するソースを作成する必要があります。
Python2 と Python3 で動作するソースを書く場合、別バージョンのPythonで同じソースを同時にテストできる「tox」と、テスト結果を詳細に表示してくれる「pytest」を導入すると便利になります。

インストール

pip でインストールできます。

pip install tox
pip install pytest

また、複数のバージョンのPythonでテストする場合は、環境に該当バージョンのPythonをインストールする必要があります。

準備

tox でテストを動作させるには最低限 setup.py と tox.ini が必要です。

まずは setup.py を用意します。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from setuptools import setup

setup(
    name='sample',
    version='0.0.1',
)

まずは tox.ini を用意します。

# tox.ini
[tox]
envlist =
    py26,
    py27,
    py32,
    py33,

[testenv]
deps = pytest
comands = py.test -v tests

実行

実行は tox コマンドで実行できます。

tox

エラーが出た場合の対処

エラーが発生した場合、toxを実行したディレクトリ直下に「.tox/log」が生成されて、ログが出力されます。
ログは比較的詳細に出力されますので、これを見ることで問題を解決することができるでしょう。

Mac OS X の特定の環境では readline 関連のエラーが出るようです。

AssertionError: Filename /path/to/python2.7/site-packages/readline.so 
      does not start with any of these prefixes

エラー発生箇所のreadline.soをリネームしておくと発生しなくなります。

cd /path/to/python2.7/site-packages/
mv readline.so readline.so-bak

環境によっては tox に関係の無いエラーが発生してしまう場合がありますが、log の出力が結構しっかりしているので、対処は可能ではないかと思います。

テストを書きましょう

あとは、テストを書きましょう。

blog comments powered by Disqus