Flake8#
Flake8은 파이썬 코드를 위한 강력한 린팅(linting) 도구.
코드 스타일을 체크하고 잠재적인 버그를 감지하는 데 사용된다.
주요 특징#
- PEP 8 준수: Flake8은 파이썬의 공식 스타일 가이드인 PEP 8을 기반으로 코드를 분석한다.
- 통합 도구: PyFlakes, pycodestyle, McCabe 복잡도 체커를 하나로 통합한 도구이다.
- 확장성: 다양한 플러그인을 지원하여 기능을 확장할 수 있다.
- 빠른 실행 속도: 대규모 코드베이스에서도 빠르게 작동한다.
### 검사하는 주요 항목들#
Flake8은 다양한 종류의 코드 품질 문제를 검사한다:
- PyFlakes를 통한 논리적 오류 검사:
- 사용되지 않는 임포트
- 참조되지 않는 변수
- 문법 오류
- 이름 공간 관련 문제
- pycodestyle을 통한 PEP 8 준수 검사:
- 들여쓰기
- 줄 길이
- 공백 사용
- 명명 규칙
- 임포트 순서
- McCabe 복잡도 검사:
- 함수와 메서드의 복잡도 측정
- 너무 복잡한 코드 블록 식별
- 리팩토링이 필요한 부분 감지
설치 및 기본 사용법#
Flake8은 pip를 통해 쉽게 설치할 수 있다:
기본 사용법은 다음과 같다:
또는 디렉토리 전체를 검사할 수도 있다:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| # 여러 Flake8 오류를 포함한 코드 예시
import sys, os # F401 'sys' imported but unused, E401 multiple imports on one line
import json # F401 'json' imported but unused
def complex_function( x,y = 42,z = None): # E201 whitespace after '(', E251 unexpected spaces around keyword / parameter equals
"""이 함수는 의도적으로 여러 Flake8 오류를 포함하고 있습니다"""
global unused_variable # F841 local variable 'unused_variable' is assigned to but never used
if x == 4: # E303 too many blank lines
return y
if z == None: # E711 comparison to None should be 'if z is None:'
z = 100
# E501 line too long
really_long_variable_name = "이것은 매우 긴 문자열입니다. 이 줄은 PEP 8에서 권장하는 79자 제한을 초과할 것입니다."
a=1 # E225 missing whitespace around operator
b=2
c=3
return[x,y,z] # E201 missing whitespace after '['
# Flake8 규칙을 준수하는 수정된 코드
import os
import sys
def complex_function(x, y=42, z=None):
"""이 함수는 Flake8 규칙을 준수하도록 수정되었습니다"""
if x == 4:
return y
if z is None:
z = 100
really_long_variable_name = (
"이것은 매우 긴 문자열입니다. "
"여러 줄로 나누어 작성되었습니다."
)
a = 1
b = 2
c = 3
return [x, y, z]
|
주요 기능#
- 코드 스타일 체크: PEP 8 가이드라인에 따라 코드 포맷을 검사한다.
- 오류 감지: 구문 오류, 변수 이름 중복, 사용되지 않는 변수 등을 감지한다.
- 복잡성 검사: McCabe 복잡도를 측정하여 유지보수가 어려운 코드를 식별한다.
설정 및 커스터마이징#
Flake8은.flake8 파일을 통해 설정을 커스터마이징할 수 있다.
예를 들어:
1
2
3
4
| [flake8]
max-line-length = 120
ignore = E203, W503
exclude = .git,__pycache__,docs/source/conf.py,old,build,dist
|
이 설정은 최대 줄 길이를 120자로 설정하고, 특정 오류를 무시하며, 일부 디렉토리를 검사에서 제외한다.
Git Hook 통합#
Flake8을 Git의 pre-commit 훅과 통합하여 커밋 전 자동으로 코드를 검사할 수 있다:
1
2
| flake8 --install-hook git
git config --bool flake8.strict true
|
이렇게 설정하면 Flake8 검사에 실패한 코드는 커밋되지 않는다.
통합 개발 환경(IDE)과의 통합#
VS Code 통합#
VS Code에서 Flake8을 자동으로 실행하도록 설정할 수 있다.
settings.json 파일에 다음과 같이 설정한다:
1
2
3
4
5
| {
"python.linting.enabled": true,
"python.linting.flake8Enabled": true,
"python.linting.lintOnSave": true
}
|
이렇게 설정하면 파일 저장 시 자동으로 Flake8이 실행된다.
참고 및 출처#