LoginSignup
5
5

More than 5 years have passed since last update.

pythonでコーディング規約(pep8)に準拠しているかチェック方法

Last updated at Posted at 2019-02-04

pythonでコーディング規約といえばpep8。
ソースコードがpep8に準拠しているかチェックするにはpycodestyleというのを使うそうです。

ちなみにpep8の日本語ドキュメントは こちら

pycodestyleインストール

> pip install pycodestyle
Collecting pycodestyle
  Downloading https://files.pythonhosted.org/packages/0e/0c/04a353e104d2f324f8ee5f4b32012618c1c86dd79e52a433b64fceed511b/pycodestyle-2.5.0-py2.py3-none-any.whl (51kB)
    100% |████████████████████████████████| 51kB 1.3MB/s
Installing collected packages: pycodestyle
Successfully installed pycodestyle-2.5.0

pycodestyle 使い方

pycodestyle [filename or directory]

特定のファイルをチェック

> pycodestyle Test.py
Test.py:6:5: E301 expected 1 blank line, found 0
Test.py:8:25: E203 whitespace before ','
Test.py:9:5: E301 expected 1 blank line, found 0
Test.py:16:1: E305 expected 2 blank lines after class or function definition, found 1
Test.py:17:19: E225 missing whitespace around operator
Test.py:38:1: E303 too many blank lines (3)

ディレクトリまるごとチェック

> pycodestyle ./
.\Test.py:6:5: E301 expected 1 blank line, found 0
.\Test.py:8:25: E203 whitespace before ','
.\Test.py:9:5: E301 expected 1 blank line, found 0
.\Test.py:16:1: E305 expected 2 blank lines after class or function definition, found 1
.\Test.py:17:19: E225 missing whitespace around operator
.\Test.py:38:1: E303 too many blank lines (3)
.\Test2.py:2:27: E231 missing whitespace after ':'
.\Test2.py:2:40: E231 missing whitespace after ':'

オプション

--first

同じ指摘は1つのみ表示する。

> pycodestyle --first Test.py
Test.py:6:5: E301 expected 1 blank line, found 0
Test.py:8:25: E203 whitespace before ','
Test.py:16:1: E305 expected 2 blank lines after class or function definition, found 1
Test.py:17:19: E225 missing whitespace around operator
Test.py:38:1: E303 too many blank lines (3)

--show-source

ソースコード上の指摘箇所も表示してくれます。

> pycodestyle --show-source Test.py
Test.py:6:5: E301 expected 1 blank line, found 0
    def __lt__(self, other):
    ^
Test.py:8:25: E203 whitespace before ','
        return (self.cnt , self.age) > (other.cnt, self.age)
                        ^
Test.py:9:5: E301 expected 1 blank line, found 0
    def __repr__(self):
    ^
Test.py:16:1: E305 expected 2 blank lines after class or function definition, found 1
dict = {}
^
Test.py:17:19: E225 missing whitespace around operator
member_data_file =open('data.csv')
                  ^
Test.py:38:1: E303 too many blank lines (3)
# 並べ替える
^

--show-pep8

pep8も表示してくれます。
見づらいので--show-sourceとセットで使う方がよさそうです。

> pycodestyle --show-source --show-pep8 Test.py
Test.py:6:5: E301 expected 1 blank line, found 0
    def __lt__(self, other):
    ^
    Separate top-level function and class definitions with two blank
    lines.

    Method definitions inside a class are separated by a single blank
    line.

    Extra blank lines may be used (sparingly) to separate groups of
    related functions.  Blank lines may be omitted between a bunch of
    related one-liners (e.g. a set of dummy implementations).

    Use blank lines in functions, sparingly, to indicate logical
    sections.

    Okay: def a():\n    pass\n\n\ndef b():\n    pass
    Okay: def a():\n    pass\n\n\nasync def b():\n    pass
    Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
    Okay: default = 1\nfoo = 1
    Okay: classify = 1\nfoo = 1

    E301: class Foo:\n    b = 0\n    def bar():\n        pass
    E302: def a():\n    pass\n\ndef b(n):\n    pass
    E302: def a():\n    pass\n\nasync def b(n):\n    pass
    E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
    E303: def a():\n\n\n\n    pass
    E304: @decorator\n\ndef a():\n    pass
    E305: def a():\n    pass\na()
    E306: def a():\n    def b():\n        pass\n    def c():\n        pass

--help

オプション見るとき使います。

> pycodestyle --help
Usage: pycodestyle [options] input ...

Options:
  --version            show program's version number and exit
  -h, --help           show this help message and exit
  -v, --verbose        print status messages, or debug with -vv
  -q, --quiet          report only file names, or nothing with -qq
  -r, --repeat         (obsolete) show all occurrences of the same error
  --first              show first occurrence of each error
  --exclude=patterns   exclude files or directories which match these comma
                       separated patterns (default:
                       .svn,CVS,.bzr,.hg,.git,__pycache__,.tox)
  --filename=patterns  when parsing directories, only check filenames matching
                       these comma separated patterns (default: *.py)
  --select=errors      select errors and warnings (e.g. E,W6)
  --ignore=errors      skip errors and warnings (e.g. E4,W) (default:
                       E121,E123,E126,E226,E24,E704,W503,W504)
  --show-source        show source code for each error
  --show-pep8          show text of PEP 8 for each error (implies --first)
  --statistics         count errors and warnings
  --count              print total number of errors and warnings to standard
                       error and set exit code to 1 if total is not null
  --max-line-length=n  set maximum allowed line length (default: 79)
  --max-doc-length=n   set maximum allowed doc line length and perform these
                       checks (unchecked if not set)
  --hang-closing       hang closing bracket instead of matching indentation of
                       opening bracket's line
  --format=format      set the error format [default|pylint|<custom>]
  --diff               report changes only within line number ranges in the
                       unified diff received on STDIN

  Testing Options:
    --benchmark        measure processing speed

  Configuration:
    The project options are read from the [pycodestyle] section of the
    tox.ini file or the setup.cfg file located in any parent folder of the
    path(s) being processed.  Allowed options are: exclude, filename,
    select, ignore, max-line-length, max-doc-length, hang-closing, count,
    format, quiet, show-pep8, show-source, statistics, verbose.

    --config=path      user config file location
5
5
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5