Programing Language/Python

코드 포맷터의 의미와 파이참에서 Black으로 코드 스타일 자동화 하기

JHeaon 2023. 11. 23. 19:16

 

 

코드 포맷터

코드를 작성하는 방법은 사람마다 다릅니다. 배운 환경이 다를 수도 있고, 사람들이 코드를 봤을 때 느끼는 편함이 사람마다 다를 수도 있기 때문인데요 하지만 다른 사람들과 협업을 할 때 다들 각자의 코드 스타일만을 추구한다면, 다른 사람들이 나의 코드를 읽기에 어려움을 겪을 수 있습니다.

 

개발자들은 이런 문제점을 해결하기 위해서 고민을 많이 해왔는데요, 이러한 문제점을 해결하기 위해서 코드 포매터를 만들었습니다. 

  • 코드 포매터 : 정한 코딩 컨벤션(코드 작성 스타일 규칙)에 따라 코드 스타일을 알아서 정리해 주는 도구를 말합니다.

 

 

Black

Black이란 최근 파이썬 커뮤니티에서 가장 널리 쓰이고 있는 코드 포맷터의 한 종류 입니다. 

 

Black : https://black.readthedocs.io/en/stable/

 

Black 23.7.0 documentation

Next The Black Code Style

black.readthedocs.io

 

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

 

코드 포매터 Prettier 설명 및 설치 방법 (+저장 시 자동 포맷 설정 방법)

코드 포매터(Code Formatter), Prettier가 무엇인가요? 코드 포매터란 정한 코딩 컨벤션(코드 작성 스타일 규칙)에 따라 코드 스타일을 알아서 정리해주는 도구입니다. Prettier는 VSCode Extension으로, 코드

crong-dev.tistory.com

https://www.daleseo.com/python-black/

 

Black으로 파이썬 코드 스타일 통일하기

Engineering Blog by Dale Seo

www.daleseo.com

https://velog.io/@heka1024/PyCharm-%ED%8F%AC%EB%A7%A4%ED%84%B0%EB%A1%9C-Black-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

 

PyCharm 포매터로 Black 설정하기

여러 포맷에 대해서 논쟁하고 서로 고쳐주느니 기계에게 맡기는게 훨씬 낫다. PyCharm에서 저장할 때마다 black이 우리의 파일 포맷을 맞추어주도록 만들자.

velog.io

 

'Programing Language/Python'의 다른글

  • 현재글 코드 포맷터의 의미와 파이참에서 Black으로 코드 스타일 자동화 하기

관련글