Pythonパッケージ開発
James Fulton
Climate informatics researcher
pytest を使用flake8 を使用静的コードチェッカー — コードを実行せずに読み取ります
flake8 features.py
features.py:2:1: F401 'math' はインポートされたが未使用
..
<filename>:<line number>:<charcter number>:<error code> <desciption>
1. import numpy as np
2. import math
3.
4. def mean(x):
5. """Calculate the mean"""
6. return np.mean(x)
7. def std(x):
8. """Calculate the standard deviation"""
9. mean_x = mean(x)
10. std = mean((x-mean(x))**2)
11. return std
12.
flake8 features.py
2:1: F401 'math' はインポートされたが未使用4:1: E302 空行は 2 行必要、1 行のみ7:1: E302 空行は 2 行必要、0 行5:4: E111 インデントが 4 の倍数ではありません 6:4: E111 インデントが 4 の倍数ではありません9:5: F841 ローカル変数 'mean_x' は代入されたが 使用されていません
1. import numpy as np
2.
3.
4. def mean(x):
5. """Calculate the mean"""
6. return np.mean(x)
7.
8.
9. def std(x):
10. """Calculate the standard deviation"""
11. mean_x = mean(x)
12. std = mean((x - mean_x)**2)
13. return std
14.
flake8 features.py
quadratic.py
4. ...
5. quadratic_1 = 6 * x**2 + 2 * x + 4;
6. quadratic_2 = 12 * x**2 + 2 * x + 8
7. ...
quadratic.py
4. ...
5. quadratic_1 = 6 * x**2 + 2 * x + 4;
6. quadratic_2 = 12 * x**2 + 2 * x + 8
7. ...
flake8 quadratic.py
quadratic.py:5:14: E222 演算子の後に複数のスペース
quadratic.py:5:35: E703 文末がセミコロンで終了
quadratic.py
4. ...
5. quadratic_1 = 6 * x**2 + 2 * x + 4; # noqa
6. quadratic_2 = 12 * x**2 + 2 * x + 8
7. ...
flake8 quadratic.py
quadratic.py
4. ...
5. quadratic_1 = 6 * x**2 + 2 * x + 4; # noqa: E222
6. quadratic_2 = 12 * x**2 + 2 * x + 8
7. ...
flake8 quadratic.py
quadratic.py:5:35: E703 文末がセミコロンで終了
コメントを使わずにスタイル違反を無視する
flake8 --ignore E222 quadratic.py
quadratic.py:5:35: E703 文末がセミコロンで終了
flake8 --select F401,F841 features.py
2:1: F401 'math' はインポートされたが未使用
9:5: F841 ローカル変数 'mean_x' は代入されたが
使用されていません
設定を保存する setup.cfg を作成する
パッケージのファイル構成
.
|-- example_package
| |-- __init__.py
| `-- example_package.py
|-- tests
| |-- __init__.py
| `-- test_example_package.py
|-- README.rst
|-- LICENSE
|-- MANIFEST.in
`-- setup.py
設定を保存する setup.cfg を作成する
[flake8]ignore = E302exclude = setup.pyper-file-ignores = example_package/example_package.py: E222
パッケージのファイル構成
.
|-- example_package
| |-- __init__.py
| `-- example_package.py
|-- tests
| |-- __init__.py
| `-- test_example_package.py
|-- README.rst
|-- LICENSE
|-- MANIFEST.in
|-- setup.py
`-- setup.cfg
$ flake8
パッケージのファイル構成
.
|-- example_package
| |-- __init__.py
| `-- example_package.py
|-- tests
| |-- __init__.py
| `-- test_example_package.py
|-- README.rst
|-- LICENSE
|-- MANIFEST.in
|-- setup.py
`-- setup.cfg
最小のフィルタリング
# noqa : <code># noqasetup.py → per-file-ignoressetup.cfg → exclude, ignore最大のフィルタリング
Pythonパッケージ開発