코드 포맷터
코드를 작성하는 방법은 사람마다 다릅니다. 배운 환경이 다를 수도 있고, 사람들이 코드를 봤을 때 느끼는 편함이 사람마다 다를 수도 있기 때문인데요 하지만 다른 사람들과 협업을 할 때 다들 각자의 코드 스타일만을 추구한다면, 다른 사람들이 나의 코드를 읽기에 어려움을 겪을 수 있습니다.
개발자들은 이런 문제점을 해결하기 위해서 고민을 많이 해왔는데요, 이러한 문제점을 해결하기 위해서 코드 포매터를 만들었습니다.
- 코드 포매터 : 정한 코딩 컨벤션(코드 작성 스타일 규칙)에 따라 코드 스타일을 알아서 정리해 주는 도구를 말합니다.
Black
Black이란 최근 파이썬 커뮤니티에서 가장 널리 쓰이고 있는 코드 포맷터의 한 종류 입니다.
Black : https://black.readthedocs.io/en/stable/
Black에서 정해놓은 코딩 스타일들은 오랜 커뮤니티의 다양한 의견을 수렴하고 여러 프로젝트에서 여러 가지 실험을 통해 결정되었기 때문에 대부분의 프로젝트에서는 무난하게 사용할만한 포맷터입니다. 또한 수많은 오픈 소스 파이썬 프로젝트들과 파이썬을 사용하는 수많은 기업들에서 Black을 정식 코드 포맷터로 채택해서 사용하고 있는 추세라고 합니다.
그래서 어떻게 사용하는데요?
pip 패키지 매니저를 이용하여 Black 패키지를 설치합니다.
- Termianl
pip install black
그 다음 파이썬 파일을 생성한 후 코드 스타일이 엉망인 코드를 작성해줍니다. 저는 예시로 main.py에 아래와 같은 코드를 작성하였습니다. 코드 가독성이 매우 안좋아졌을뿐, 코드를 실행하는데 있어서는 큰 문제가 없는 코드 입니다.
- main.py
from seven_dwwarfs import Grumpy, Happy, Sleepy, Bashful, Sneezy, Dopey, Doc
x = { 'a':37,'b':42,
'c':927}
x = 123456789.123456789E123456789
if very_long_variable_name is not None and \
very_long_variable_name.field > 0 or \
very_long_variable_name.is_debug:
z = 'hello '+'world'
else:
world = 'world'
a = 'hello {}'.format(world)
f = rf'hello {world}'
if (this
and that): y = 'hello ''world'#FIXME: https://github.com/python/black/issues/26
class Foo ( object ):
def f (self ):
return 37*-2
def g(self, x,y=42):
return y
def f ( a: List[ int ]) :
return 37-a[42-u : y**3]
def very_important_function(template: str,*variables,file: os.PathLike,debug:bool=False,):
"""Applies `variables` to the `template` and writes to `file`."""
with open(file, "w") as f:
...
regular_formatting = [
0, 1, 2,
3, 4, 5,
6, 7, 8,
]
해당 파일을 코드 컨벤션에 따라 정리하기 위해 터미널에 black 커맨드를 사용하여 파일을 지정합니다.
- Terminal
black main.py
해당 파일이 아래와 같이 정리되어 있음을 확인 할 수 있었습니다.
- main.py
from seven_dwwarfs import Grumpy, Happy, Sleepy, Bashful, Sneezy, Dopey, Doc
x = {"a": 37, "b": 42, "c": 927}
x = 123456789.123456789e123456789
if (
very_long_variable_name is not None
and very_long_variable_name.field > 0
or very_long_variable_name.is_debug
):
z = "hello " + "world"
else:
world = "world"
a = "hello {}".format(world)
f = rf"hello {world}"
if this and that:
y = "hello " "world" # FIXME: https://github.com/python/black/issues/26
class Foo(object):
def f(self):
return 37 * -2
def g(self, x, y=42):
return y
def f(a: List[int]):
return 37 - a[42 - u : y ** 3]
def very_important_function(
template: str, *variables, file: os.PathLike, debug: bool = False,
):
"""Applies `variables` to the `template` and writes to `file`."""
with open(file, "w") as f:
...
regular_formatting = [
0,
1,
2,
3,
4,
5,
6,
7,
8,
]
파이참에서 사용하기
하지만 모든 소스 코드를 black 명령어를 사용하여 처리할 순 없는데요, 이를 제가 자주사용하는 파이참에서 설정하여 소스 코드 저장 시 자동으로 포맷팅을 잡아주도록 설정해보도록 합니다.
설정은 아래의 순서에 따릅니다.
- 파이참 세팅에 들어갑니다
- 새 파일 감시기를 만들고 다음과 같은 형태로 새 파일 감시기를 만듭니다.
- 이때 프로그램 경로는 가상환경/bin/black 로 설정합니다.
이렇게 설정하게 되면 자동으로 black 포맷팅이 프로젝트에서 수행하게 됩니다.
참조 :
https://crong-dev.tistory.com/67
https://www.daleseo.com/python-black/
'Programing Language > Python' 카테고리의 다른 글
문자열 모듈 String을 이용해서 문자열 모음 가져오기 (0) | 2023.11.24 |
---|---|
requests, bs4, selenium4을 통해 웹 페이지 데이터 크롤링하기 (0) | 2023.11.24 |
pyautogui을 이용하여 자동화 기능 만들기 (1) | 2023.10.28 |
추상 클래스와 덕 타이핑 (0) | 2023.09.06 |
requests 기본 동작 방식과 session() (0) | 2023.09.03 |