Jello's development blog

Jello's development blog

파이썬 패키지, flake8 소개

flake8은 무엇인가?

flake8은 파이썬 패키지 중 하나로, 폴더 안의 파이썬 파일이나 특정 파이썬 파일의 코드 스타일을 검사해주는 도구이다. 기본적으로 PEP8(Python Enhance Proposal 8)의 코드 스타일 가이드(코딩 컨벤션) 대로 검사해주며, 원하는 가이드만 설정하여 검사시킬 수도 있다.

flake8 설치하기

아래 명령어로 설치할 수 있다.

$ pip install flake8

flake8으로 검사하기

우선 파이썬 코드를 코딩 컨벤션을 신경쓰지 않고 아무렇게나 작성해보겠다.

test.py

def print_helloworld():
	print("Hello world!")

print_helloworld()
a=1
a+=1
print(a)

그 뒤에 flake8을 이용하여 test.py의 코딩 컨벤션을 검사해보겠다.

$ flake8 test.py

파일명에는 디렉토리명이 들어가도 되며, 디렉토리명이 들어갔을 시에는 디렉토리 내부에 있는 모든 파이썬 파일을 검사한다. 아래는 검사 결과이다.

test.py:2:1: W191 indentation contains tabs
test.py:5:2: E225 missing whitespace around operator
test.py:6:2: E225 missing whitespace around operator
test.py:7:9: W292 no newline at end of file

결과에는 파일 이름, 줄 번호, 글자 번호, 가이드 코드(?), 가이드 설명이 차례로 나온다.

flake8 설정

프로젝트마다 다르게 규칙을 정해야 하거나, 일부 규칙만 빼고 검사하길 원할 수도 있을 것이다. 그러기 위해서는 설정 파일을 만들어야 한다.

먼저 기본으로 적용되는 글로벌 검사를 설정하려면, 윈도우에서는 사용자 기본 폴더에 .flake파일을 (~/.flake) 만들어야 하고, 맥이나 리눅스에서는 config폴더 안에 .flake파일을(~/config/.flake) 만들어야 한다.

다음으로 하나의 디렉토레 내의 검사를 설정하려면, 그 루트 디렉토리에 .flake8, tox.ini, setup.cfg 중 하나의 파일을 만들면 된다.

설정 파일의 예시는 아래에 나와있다.

.flake8

[flake8]
# F812: list comprehension redefines ...
# H101: Use TODO(NAME)
# H202: assertRaises Exception too broad
# H233: Python 3.x incompatible use of print operator
# H301: one import per line
# H306: imports not in alphabetical order (time, os)
# H401: docstring should not start with a space
# H403: multi line docstrings should end on a new line
# H404: multi line docstring should start without a leading new line
# H405: multi line docstring summary not separated with an empty line
# H501: Do not use self.__dict__ for string formatting

ignore = F812,H101,H202,H233
exclude =
    # No need to traverse our git directory
    .git,
    # There's no value in checking cache directories
    __pycache__,
    # The conf file is mostly autogenerated, ignore it
    docs/source/conf.py,
    # The old directory contains Flake8 2.0
    old,
    # This contains our built documentation
    build,
    # This contains builds of flake8 that we don't want to check
    dist
max-complexity = 10

중요한 점은 맨 위에 [flake8]을 넣어야 한다는 것이다. 이것을 하지 않으면 flake8이라고 인식하지 못하기 때문이다.

ignore에는 사용하지 않을 가이드를 넣고, exclude에는 검사하지 않을 파일이나 디렉토리 Path를 넣는다.

더 자세한 설정 방법은 flake8 홈페이지를 참조하기 바란다.

참고 링크