프로그래밍에서 일관성 있는 코드 스타일은 가독성을 높이고, 협업 시 생산성을 극대화하는 중요한 요소입니다.
특히, Python과 같은 유연한 언어에서는 코드 스타일이 엇갈리기 쉽습니다.
이번 글에서는 Python에서 일관성을 유지하며 깔끔한 코드를 작성할 수 있도록 도와주는 도구와 팁을 소개합니다.
1. Python 코딩 스타일의 중요성
Python은 PEP 8 (Python Enhancement Proposal 8)이라는 코드 스타일 가이드를 제공합니다.
이 가이드는 코드의 가독성을 높이고, Python 개발자들 사이의 통일성을 유지하는 것을 목표로 합니다. 그러나 사람마다 스타일이 다를 수 있기 때문에, 프로젝트에서 일관성을 유지하려면 자동화된 도구의 도움이 필요합니다. -
2. PyPI 도구 활용하기
Python 개발에서 유용한 스타일 도구와 라이브러리는 PyPI(Python Package Index)에서 쉽게 설치하고 사용할 수 있습니다.
다음은 일관된 코딩 스타일을 유지하는 데 유용한 몇 가지 도구입니다.
#1 Black
Black은 "모든 코드는 같아야 한다"는 철학을 따르는 포매터입니다. Black을 사용하면 코드 스타일을 신경 쓰지 않고도 항상 일정한 형식의 코드를 유지할 수 있습니다.
pip install black 을 통해 간단히 설치하고사용할수 있지요!!
#2 isort
Python에서 import 정렬은 스타일에서 자주 논쟁이 되는 부분입니다.
isort는 import 문을 자동으로 정렬해주는 도구로, Black과 함께 사용하면 더욱 강력합니다.
#3 Flake8
Flake8은 코드의 문법 오류, 스타일 위반을 검사하는 데 유용한 도구입니다.
프로젝트의 PEP 8 준수 여부를 확인하고, 불필요한 코드나 비효율적인 코드를 감지합니다.
2. 이 모든걸 한번에!!Ruff Linter!!
※ 참고 : linter란?? Linter는 프로그래밍 언어에서 코드의 문법적 오류와 스타일 문제를 자동으로 감지하고 분석해주는 코드 정적 분석 도구입니다. 개발자가 작성한 코드를 컴파일하거나 실행하지 않아도, 코드의 잠재적인 오류를 사전에 발견하고 개선할 수 있도록 돕습니다. |
Python 코드에서 스타일을 검사하고 자동으로 문제를 해결해주는 도구 중 하나가 바로 Ruff입니다. Ruff는 속도가 매우 빠르며, Black, isort, Flake8 등의 기능을 한곳에서 제공합니다.
왜 Ruff를 써야 할까?
- 속도: 대규모 프로젝트에서도 빠르게 동작.
- 통합성: 여러 도구의 기능을 하나로 통합.
- 자동 수정: 스타일 문제를 자동으로 고칠 수 있는 기능 제공.
Ruff 설치 및 사용법
pip install ruff
코드 검사:
## 파일명을 대상으로!! 검사하기
ruff check your_file.py
## 파일명을 대상으로!! 검사하기 & 수정하기
ruff check --fix your_file.py
Ruff는 PEP 8 스타일 준수 외에도 프로젝트별 규칙을 설정할 수 있으며,
불필요한 import 정리나 코드 최적화를 한 번에 처리합니다.
특히, Flake8과 isort를 대체할 수 있어 더 간결한 워크플로를 제공합니다.
+ 나만의 TIP! ①
VScode, Cursor 등에서는 ruff extension 설치가 가능합니다~~
설치후에는!! 문제되는 부분을 모두 확인할 수 있어요!!
+ 나만의 TIP! ②
ruff 가 꼼꼼히 봐주지만서도,, 너무 꼼꼼히봐줘서 문제가될떄도 있는데요!
이에 저는 pyproject.toml에 아래와 같이 예외를 두고 실행합니다!!
[tool.ruff.lint]
select = ["ALL"]
ignore = [
"ANN", # 모든 타입 주석 경고 비활성화
"ARG", # 모든 함수 인수 관련 경고 비활성화
"B007", # 루프 제어 변수가 사용되지 않음
"B009", # getattr를 상수 속성 값으로 호출하지 않음
"B011", # False를 assert하지 않음
"DTZ001", # tzinfo 없이 datetime 호출
"DTZ007", # 시간대 없이 datetime.strptime 호출
"DTZ011", # date.today 호출
"D405", # 섹션 이름의 대문자 처리 (TODO 및 NOTE와 관련된 버그)
"E501", # 너무 긴 줄
"G004", # f-string에서 로깅 사용
"PD013", # pandas의 .stack 사용
"PLR0913", # 너무 많은 인수
"PTH103", # os.makedirs
"PTH110", # os.path.exists
"PTH113", # os.path.isfile
"PTH118", # os.path.join
"PTH123", # builtin-open
"RET504", # 불필요한 변수 할당
"S301", # 의심스러운 pickle 사용
"S603", # shell=True 없이 subprocess 실행
"S607", # 잘못된 경로로 프로세스 시작
"TC002", # typing 전용 서드파티 import
"E402", # import가 파일 상단에 위치하지 않음
"E402", # import가 파일 상단에 위치하지 않음 (중복)
"BLE001", # except의 세부 사항을 모른상태에서 처리하기
"E722", # bare except허가해주기
]
코딩!! 화이팅입니다!!
'데이터&AI > 기타개발' 카테고리의 다른 글
[realtime GPT를 쓰기위한 사전학습] socket통신의 이해 (python에서의 TCP 통신!) (0) | 2024.10.24 |
---|---|
[realtime GPT를 쓰기위한 사전학습]pyaudio이해하기② (데이터를 소리로 전환!!!) (2) | 2024.10.23 |
[realtime GPT를 쓰기위한 사전학습] queue 의 이해 (python. 줄을 서시오!! FIFO) (2) | 2024.10.18 |
[realtime GPT를 쓰기위한 사전학습] threading의 이해 (python의 멀티태스킹!) (1) | 2024.10.17 |
Python으로 주말 or 공휴일 체크하는 로직 만들기 (with 공공 API) (0) | 2024.10.14 |
댓글