異なる環境でパッケージをテストする

Pythonパッケージ開発

James Fulton

Climate informatics researcher

複数の Python バージョンをテストする

この setup.py は Python 2.7 以降の任意のバージョンを許可します。

from setuptools import setup, find_packages

setup(
    ...
    python_requires='>=2.7',
)

これらの Python をテストするには:

  • すべての対象 Python をインストール
  • 各 Python にパッケージと依存関係をインストール
  • pytest を実行
Pythonパッケージ開発

複数の Python バージョンをテストする

この setup.py は Python 2.7 以降の任意のバージョンを許可します。

from setuptools import setup, find_packages

setup(
    ...
    python_requires='>=2.7',
)

これらの Python をテストするには:

  • すべての対象 Python をインストール
  • tox を実行
Pythonパッケージ開発

tox とは?

  • 複数の Python バージョンでテストを実行するためのツール
Pythonパッケージ開発

tox を設定する

構成ファイル - tox.ini

mysklearn/
|-- mysklearn
|   |-- ...
|-- tests
|   |-- ...
|-- setup.py
|-- LICENSE
|-- MANIFEST.in
|-- tox.ini   <--- 構成ファイル
Pythonパッケージ開発

tox を設定する

構成ファイル - tox.ini

[tox]

envlist = py27, py35, py36, py37
[testenv]
deps = pytest
commands = pytest
echo "run more commands" ...
  • 見出しは角かっこ [...] で囲む。
  • Python X.Y を試すには envlistpyXY を追加。
  • テストする Python は事前にインストールしておく。
  • commandstox が実行するターミナルコマンド。
  • commands には lscdecho など任意のコマンドを指定可。
Pythonパッケージ開発

tox を実行する

tox
mysklearn/    <-- ここへ移動
|-- mysklearn
|   |-- ...
|-- tests
|   |-- ...
|-- setup.py
|-- LICENSE
|-- MANIFEST.in
|-- tox.ini
Pythonパッケージ開発

tox の出力

py27 create: /mypackages/mysklearn/.tox/py27
py27 installdeps: pytest
py27 inst: /mypackages/mysklearn/.tox/.tmp/package/1/mysklearn-0.1.0.zip
py27 installed: mysklearn==0.1.0,numpy==1.16.6,pandas==0.24.2,pytest==4.6.11,...
py27 run-test-pre: PYTHONHASHSEED='2837498672'
...
Pythonパッケージ開発

tox の出力

py27 run-test: commands[0] | pytest
======================== test session starts ========================
platform linux2 -- Python 2.7.17, ...
rootdir: /home/workspace/mypackages/mysklearn
collected 6 items                         

tests/preprocessing/test_normalize.py ...                     [ 50%]
tests/preprocessing/test_standardize.py ...                   [100%]

========================= 6 passed in 0.23s =========================
Pythonパッケージ開発

tox の出力

...
__________________________ summary __________________________
  py27: commands succeeded
  py35: commands succeeded
  py36: commands succeeded
  py37: commands succeeded
Pythonパッケージ開発

tox の出力

...
__________________________ summary __________________________
  py27: commands succeeded
  py35: commands succeeded
  py36: commands succeeded
ERROR:   py37: commands failed
Pythonパッケージ開発

Ayo berlatih!

Pythonパッケージ開発

Preparing Video For Download...