flake8
은 파이썬(Python) 코드를 점검해주는 도구이자 파이썬 패키지입니다. 이 도구는 일부 오류가 있을 법한 코드나 불필요한 모듈 임포트(import), 이상한 띄어쓰기나 잘못된 들여쓰기 등등 여러 문제점을 알려줍니다. 약간 딱딱하게 표현해서 PEP8 코딩 컨벤션에 맞지 않는 것들을 알려줍니다. 이런 기능을 하는 도구를 린트(Lint)라고 표현하기도 하지요. 비슷한 도구로 pyflake
도 있습니다.
설치법
파이썬 패키지이기 때문에 pip로 그냥 설치하면 됩니다.
pip install flake8
시스템에 따라 sudo
를 줘서 루트 권한으로만 설치가 가능할 수도 있습니다.
사용법
flake8은 기본적으로 셸 CLI 유틸리티이기 때문에 커맨드 라인에서 간단히 실행시킬 수 있습니다. 그리고 실행 시 옵션으로 오류 체크를 할 파이썬 코드 파일의 경로를 줄 수 있습니다.
flake8 /foo/bar/some/file.py
이렇게 하면 체크된 내용을 텍스트로 화면에 표시해 줍니다.
하지만 요즘은 이렇게 단독으로 실행시키기보다는 에디터나 IDE 등에서 자동으로 호출해서 체크하는 방식으로 동작하는 경우도 많기 때문에 굳이 손수 실행시킬 일은 잘 없는 것 같습니다. Emacs나 Vim 등을 사용한다면 아마도 관련된 확장 플러그인이 있을 테니 잘 찾아봅시다.
설정 파일
문법 체크 도구이지만 종종 몇 가지 체크는 생략하게 하고 싶다거나 등등 flake8 자체를 설정하는 방법이 필요한 경우도 있습니다. 이를 위한 설정 시스템 역시 제공합니다.
전역 설정파일은 ~/.config/flake8
파일에, 프로젝트 단위 설정은 프로젝트 루트에 .flake8
혹은 setup.cfg
파일로 설정 내용을 작성하면 됩니다.
대충 아래와 같은 식으로 작성합니다.
[flake8]
max-line-length = 80
ignore = F123, E456
exclude = file_to_exclude.py
위의 예제에 쓰인 각 키워드는 아래와 같은 의미입니다.
max-line-length
: 칼럼 사이즈(한 라인의 권장 길이). 기본은 아마도 하드웨어 터미널 권장 크기인 80 칼럼일 것입니다.ignore
: 체크하지 않을 문법의 코드. 예제에 쓰인F123
이나E456
은 그냥 예제일 뿐이며 별 의미는 없습니다.exclude
: 체크하지 않을 파일 목록.
물론 설정 가능한 내역은 이 보다 더 광범위할 수 있으니 공식 매뉴얼 혹은 PEP8 코딩 컨벤션을 참조합시다.
파일 별로 일부 경고 무시하기
별도의 설정 파일을 사용하지 않고 커맨드 라인 옵션으로도 특정 문법 체크를 무시할 수 있습니다.
flake8 --ignore F123,E456 FILEPATH
하지만 에디터나 IDE 등을 통해 사용되는 경우는 이렇게 쓸 일이 없겠죠?
다른 방법으로 소스 코드 상에 주석으로 설정하는 방법이 있습니다. 예를 들어 소스 코드에서 특정 라인 하나만 무시하려면 라인 끝에 아래와 같은 주석으로 표기가 가능합니다.
... some statement ... # noqa: F123,E456
이렇게 하면 해당 라인에서 F123과 E456 문법 체크를 하지 않습니다. 만약 별도로 에러 코드를 표기하지 않고 noqa
만 명시하면 모든 오류 체크가 무시됩니다.
위와 비슷하게 아래처럼 아예 해당 파일의 체크를 하지 않게 할 수도 있습니다. 파일 상단에 아래의 주석을 추가하면 됩니다.
# flake8: noqa
이렇게 하면 이 파일은 문법 체크를 하지 않게 됩니다.
이렇게 하는 경우는 그다지 흔하지는 않겠지만, 만약 호스트의 패키지 구성과 디플로이 환경의 패키지 구성이나 버전 등이 다를 경우 모듈이 없다는 등등 불필요한 경고를 보게 될 수도 있습니다. 아무래도 경고가 계속 표시되는 것은 불편하거나 불쾌(?)할 수도 있겠지요? 이럴 때는 간간히 사용할 수도 있을 것 같습니다.
'기술적인 이야기 > 기타 개발' 카테고리의 다른 글
Python 3 정적 타이핑 소개 및 소감(?) (0) | 2020.02.13 |
---|---|
Python에 F-string 이라는 게 있었다? (0) | 2020.02.11 |
파이썬의 새로운 의존성 관리자 Poetry (2) | 2020.01.07 |
Docker에서 macOS 호스트 포트에 접근하기 (267) | 2019.07.19 |
python2가 없는(?) 내 컴퓨터 (269) | 2019.07.12 |
댓글