본문 바로가기

[Python] Code Formatter 코드포매터

@Jeeqong 2025. 3. 17. 20:53
반응형

기본 규칙

  1. 공백(Space) 또는 탭(Tab) 사용
    • 보통 4개의 스페이스(공백)를 사용하는 것이 표준.
    • 탭(Tab) 대신 스페이스를 사용하는 것이 권장됨 (PEP 8 스타일 가이드).
    • 혼합 사용하면 IndentationError 발생할 수 있음.
  2. 같은 블록은 동일한 들여쓰기 유지
    • 동일한 코드 블록(예: if 문 내부, 함수 내부 등)은 동일한 들여쓰기 깊이로 작성.
    • 들여쓰기 깊이가 다르면 IndentationError 발생.
  3. 콜론(:) 뒤에는 들여쓰기 필요
    • if, for, while, def, class 등 블록을 여는 문장은 :로 끝나고, 그다음 줄부터 들여쓰기해야 함.

 

🎯 Prettier vs ESLint에 해당하는 파이썬 도구

 

역할 JavaScript (Next.js) Python
코드 포맷팅 (Prettier) Prettier Black, autopep8, yapf
코드 스타일 검사 (ESLint) ESLint Flake8, Pylint

1. Prettier 역할 → Black / autopep8 / yapf

✅ 자동 코드 포맷팅 (들여쓰기 포함)

JavaScript에서 Prettier가 하는 역할을 파이썬에서는 Black, autopep8, yapf 같은 도구로 검사.

  • Black → 가장 엄격한 코드 포맷터, "모든 걸 자동으로 맞춰줌"
  • autopep8 → PEP 8 스타일 가이드에 맞게 정리 (Prettier와 가장 유사)
  • yapf → 구글 스타일 가이드를 따르는 포맷터

🔹 Black 설치 및 사용 예제

pip install black
black myfile.py  # 파일 자동 포맷팅

💡 Black은 "4칸 들여쓰기 + PEP 8 스타일"을 자동 적용해줌.

 

✅ black (코드 포맷팅)

폴더 내 모든 .py 파일을 검사 및 포맷팅

black .
  • . → 현재 폴더 내 모든 .py 파일을 자동 포맷팅
  • 하위 폴더까지 모든 .py 파일을 재귀적으로 검사 후 수정

🔹 특정 폴더만 검사 및 포맷팅

black src/  # src 폴더 내의 모든 Python 파일 포맷팅

 

🔹 특정 확장자 제외 (-exclude)

black . --exclude "migrations/"
  • "migrations/" 폴더 내 파일 제외
  • 정규식을 사용할 수도 있음

📌 예제: .ipynb(Jupyter Notebook)와 migrations/ 폴더 제외

black . --exclude "\\.ipynb|migrations/"

2. ESLint 역할 → Flake8 / Pylint

✅ 코드 스타일 검사 (버그, 스타일 규칙 체크)

JavaScript에서 ESLint가 코드 스타일을 검사하듯이, 파이썬에서는 Flake8 또는 Pylint 를 사용.

  • Flake8 → 가장 널리 사용됨, 간단한 코드 스타일 체크
  • Pylint → 좀 더 강력한 린터 (타입 검사까지 포함)

🔹 Flake8 설치 및 사용 예제

pip install flake8
flake8 myfile.py  # 코드 스타일 체크

💡 Flake8은 들여쓰기 오류(IndentationError), 변수 미사용 경고 등을 수정해줌.

 

✅ flake8 (코드 스타일 검사)

🔹 폴더 내 모든 .py 파일 검사

flake8 .
  • . → 현재 폴더 내 모든 .py 파일을 검사
  • 하위 폴더까지 자동으로 검사 수행

🔹 특정 폴더만 검사

flake8 scraper/  # scraper 폴더만 검사

 

🔹 특정 확장자 또는 폴더 제외 (-exclude)

flake8 . --exclude=migrations,__pycache__,tests
  • migrations/, __pycache__/, tests/ 폴더 내 파일 제외

📌 예제: Jupyter Notebook(.ipynb) 파일과 특정 폴더 제외

flake8 . --exclude=migrations,__pycache__,tests --ignore=E501
  • E501 → 너무 긴 줄 경고 무시 (PEP 8에서 79자 이상)

🎯 .black과 .flake8 설정 파일을 사용해 확장자/폴더 제외

✅ black 설정 (pyproject.toml)

📌 black은 pyproject.toml 파일에서 설정 가능.

[tool.black]
line-length = 88  # 기본값 88 → 79로 변경 가능
target-version = ['py38']  # 특정 Python 버전 지정 가능
exclude = '''
/(
    migrations  # Django migration 파일 제외
    | __pycache__  # 캐시 폴더 제외
    | .*\\.ipynb  # Jupyter Notebook 제외
)/
'''
  • exclude는 정규식 패턴 사용 가능.

✅ flake8 설정 (.flake8 or setup.cfg)

📌 .flake8 파일을 프로젝트 루트에 생성하여 설정 가능.

[flake8]
exclude = migrations, __pycache__, tests  # 제외할 폴더
max-line-length = 88  # 줄 길이 제한 (기본값: 79)
ignore = E203, E266, E501  # 특정 경고 무시

📌 setup.cfg에서도 같은 설정 가능.

[tool:flake8]
exclude = migrations, __pycache__, tests
max-line-length = 88
반응형
Jeeqong
@Jeeqong :: JQVAULT

Jeeqong's vault : 정보/기록을 쌓아두는 공간 웹개발 포스팅 일상 리뷰를 기록하는 공간입니다.

공감하셨다면 ❤️ 구독도 환영합니다! 🤗

목차