Python のコーディングスタイル (PEP8) のチェック

2016年8月11日

はじめに

Python のコーディングスタイル (PEP8) のチェックについて。

環境

  • Windows 7 64 bit
  • MSYS2 64 bit (MinGW w64)
  • Anaconda3 4.1.1
  • Jupyter 4.1.0

コーディングスタイルのチェック

pep8

Python には PEP8 と呼ばれるコーディングスタイルがあるそうである。いちいち手動でチェックするのは大変そうなので、pep8 というプログラムでチェックする。

インストールは次のようにする。

$ pip install pep8

チェックしたいコードに対して、次のように実行する。

$ pep8 test.py

test.py

import numpy as np

a=np.matrix('1., 2.; 3., 4.')
b=np.matrix('5., 6.; 7., 8.')

print(a*b)

チェック

$ pep8 test.py
test0.py:3:2: E225 missing whitespace around operator
test0.py:4:2: E225 missing whitespace around operator
test0.py:7:1: W391 blank line at end of file

"=" の両側にスペースがいると言っているらしい。

autopep8

手動で直してもよいが、いっぱいあったら大変なので、autopep8 で自動修正する。

インストール

$ pip install autopep8

実行

$ autopep8 test.py
import numpy as np

a = np.matrix('1., 2.; 3., 4.')
b = np.matrix('5., 6.; 7., 8.')

print(a * b)

オプション "-i" でファイルを直接修正する。

$ autopep8 -i test.py

文法のチェック

スタイル以前に文法が間違っていたら意味がないので、文法チェッカーを導入する。Python の文法チェッカーの一つに flake8 がある。

インストール

$ pip install flake8

test.py

import numpy as np

a=np.matrix('1., 2.; 3., 4.'
b=np.matrix('5., 6.; 7., 8.')

print(a*b)

チェック

$ flake8 test.py
test.py:1:1: E902 TokenError: EOF in multi-line statement
test.py:4:2: E999 SyntaxError: invalid syntax

実は flake8 でも PEP8 のチェックができる。

test.py

import numpy as np

a=np.matrix('1., 2.; 3., 4.')
b=np.matrix('5., 6.; 7., 8.')

print(a*b)

$ flake8 test.py
test.py:3:2: E225 missing whitespace around operator
test.py:4:2: E225 missing whitespace around operator

Jupyter Notebook でのチェック

Jupyter Notebook から pep8 を呼び出すマジックコマンドを公開されているかたがいる (こちら)。pep8magic.py をダウンロード ("Download ZIP") して、~/.ipython/extensions に入れる。そして次のように実行する。

%load_ext pep8magic
%%pep8
import numpy as np

a=np.matrix('1., 2.; 3., 4.')
b=np.matrix('5., 6.; 7., 8.')

print(a * b)

出力

stdin:3:2: E225 missing whitespace around operator
a=np.matrix('1., 2.; 3., 4.')
 ^
stdin:4:2: E225 missing whitespace around operator
b=np.matrix('5., 6.; 7., 8.')

参考