意外とまだあんまり知られていないような気がしたので、このブログにも書いておく。
PEP8 と pep8 と pycodestyle
Python には PEP8 という有名なコーディングスタイルガイドラインがある。
そして、そのコーディングスタイルに沿ったコードになっているのかをチェックするツールとして pep8 というパッケージがあった。
過去形にするのは半分正しくなくて、上記のように今もある。 ただ、これは後方互換のために残されているだけで、もうバージョンアップはされないだろう。
今後は代わりに pycodestyle
というパッケージを使うことになる。
これは単にパッケージとコマンドの名前が変わっただけ。 とはいえ、こちらはバージョンアップが続くので最新の PEP8 に追従していくしチェックできる範囲も増えていくはず。 (PEP に書かれている内容は必要に応じて更新される)
試しに使ってみることにしよう。
まずは Python のパッケージマネージャである pip
でインストールする。
$ pip install pycodestyle
サンプルコードとして PEP8 違反がいくつか含まれるものを用意した。
#!/usr/bin/env python # -*- coding: utf-8 -*- # 改行が足りない def greeting(name = 'World'): # 余分なスペースがある print('Hello, {name}'.format(name=name)) def main(): greeting() # インデントが 4 スペースでない if __name__ == '__main__': main() # 改行が多い
pycodestyle
コマンドで上記のコードをチェックしてみる。
$ pycodestyle sample.py sample.py:5:1: E302 expected 2 blank lines, found 1 sample.py:5:18: E251 unexpected spaces around keyword / parameter equals sample.py:5:20: E251 unexpected spaces around keyword / parameter equals sample.py:10:3: E111 indentation is not a multiple of four sample.py:17:1: W391 blank line at end of file
色々と PEP8 に準拠していない箇所が見つかった。
PEP257 と pep257 と pydocstyle
同じことが pep257
と pydocstyle
にも起きている。
PEP257 は docstring のフォーマットを規定したドキュメントの名前を指している。
そして、PEP8 と同じように pep257
というチェックツールがあった。
そして、同じように pydocstyle
という名前に変更されている。
こちらも試しに使ってみることにしよう。
pip
でさくっと入る。
$ pip install pydocstyle
そして PEP257 に違反している箇所を含むサンプルコードを用意した。
#!/usr/bin/env python # -*- coding: utf-8 -*- # そもそも docstring がない def greeting(name='World'): '''ダブルクォートを使っていない''' print('Hello, {name}'.format(name=name)) def main(): """ 改行が多い """ greeting() if __name__ == '__main__': main()
pydocstyle
コマンドで上記のコードをチェックしてみよう。
$ pydocstyle sample.py sample.py:1 at module level: D100: Missing docstring in public module sample.py:7 in public function `greeting`: D300: Use """triple double quotes""" (found '''-quotes) sample.py:7 in public function `greeting`: D400: First line should end with a period (not 'い') sample.py:12 in public function `main`: D200: One-line docstring should fit on one line with quotes (found 3) sample.py:12 in public function `main`: D208: Docstring is over-indented sample.py:12 in public function `main`: D400: First line should end with a period (not 'い')
PEP257 に違反している箇所が見つかった。
周辺ツールの対応
リネームされたパッケージを依存パッケージに持つ主要なパッケージはどうなっているかなー、というのも一応は確認しておく。
例えば flake8
とか autopep8
について pipdeptree
で見てみよう。
$ pip install flake8 autopep8 pipdeptree
flake8
は pycodestyle
を使うようになっている。
$ pipdeptree | grep -A 3 flake8 flake8==3.3.0 - mccabe [required: <0.7.0,>=0.6.0, installed: 0.6.1] - pycodestyle [required: >=2.0.0,<2.4.0, installed: 2.3.1] - pyflakes [required: >=1.5.0,<1.6.0, installed: 1.5.0]
autopep8
も pycodestyle
を使うようになっていた。
$ pipdeptree | grep -A 1 autopep8 autopep8==1.3.2 - pycodestyle [required: >=2.3, installed: 2.3.1]
間接的に使っている場合には特に対応する必要はなさそうだ。
まとめ
pep8
はpycodestyle
に名前が変わったpep257
はpydocstyle
に名前が変わったflake8
とかで間接的に使っている分には特に対応する必要はない
参考
事の発端は、このチケットらしい。
Please rename this tool · Issue #466 · PyCQA/pycodestyle · GitHub
いじょう。
スマートPythonプログラミング: Pythonのより良い書き方を学ぶ
- 作者: もみじあめ
- 発売日: 2016/03/12
- メディア: Kindle版
- この商品を含むブログ (1件) を見る