Backend/Python

코드 스타일 통일을 위해 Black 적용하기

sangwonYoon 2023. 4. 26. 02:30

팀원들과 파이썬 프로젝트를 진행하면서 코드의 스타일과 포맷을 일관성 있게 맞춰야겠다는 필요성을 느끼게 되었다. 파이썬에는 PEP8이라는 파이썬 코드의 공식 스타일 가이드가 존재한다.

 

PEP 8 – Style Guide for Python Code | peps.python.org

PEP 8 – Style Guide for Python Code Author: Guido van Rossum , Barry Warsaw , Nick Coghlan Status: Active Type: Process Created: 05-Jul-2001 Post-History: 05-Jul-2001, 01-Aug-2013 Table of Contents This document gives coding conventions for the Python co

peps.python.org

하지만 코드 컨벤션의 모든 내용을 외우면서 작업하기는 어렵기 때문에 이를 도와주는 도구가 존재한다.

이번 포스팅에서는 style checkerformatter에 대해 알아보고, 널리 사용되는 python code formatter인 Black을 VSCode에서 사용하는 방법에 대해 알아보자.


Style Checker

파이썬의 코드의 문법 오류와 스타일 가이드 준수 여부를 체크해주는 도구이다.

  • Pylint
  • Flake8
  • pycodestyle

등이 있다.

 

Formatter

style checker가 코드를 체크하는 역할을 한다면, formatter는 체크한 결과를 수정까지 해주는 도구이다.

  • autopep8
  • YAPF
  • Black

등이 있다.

 

Black의 코드 스타일

기본적으로 PEP8 기반의 코드 스타일을 따른다.

대표적인 코드 스타일을 살펴보면

  • 들여쓰기에는 4개의 공백 사용
  • 코드 한줄의 최대 길이는 88자로 제한
  • 함수 호출시 인자들 간에 공백 사용하지 않음
  • 이항 연산자 앞뒤로는 공백을 하나씩 사용

등이 있다.

 

The Black code style - Black 23.3.0 documentation

Previous The Black Code Style

black.readthedocs.io

 

Black 설치

# pip로 설치
pip install black

# conda로 설치
conda install -c conda-forge black

 

Black 사용 방법

터미널에서 아래 명령어를 입력해 코드를 포매팅할 수 있다.

black {파일 또는 디렉토리 이름}

디렉토리 이름을 입력하면 디렉토리 하위 파일들을 한번에 포매팅할 수 있다.

# 적용 전
class InferTextDataset(torch.utils.data.Dataset):
    def __init__(self, data_file, text_columns, target_columns=None, delete_columns=None, max_length=512, model_name='klue/roberta-small'):
        self.data = pd.read_csv(data_file)
        self.text_columns = text_columns
        self.delete_columns = delete_columns if delete_columns is not None else []
        self.max_length = max_length
        self.tokenizer = AutoTokenizer.from_pretrained(model_name)
        self.inputs = self.preprocessing(self.data)
# 적용 후
class InferTextDataset(torch.utils.data.Dataset):
    def __init__(
        self,
        data_file,
        text_columns,
        target_columns=None,
        delete_columns=None,
        max_length=512,
        model_name="klue/roberta-small",
    ):
        self.data = pd.read_csv(data_file)
        self.text_columns = text_columns
        self.delete_columns = delete_columns if delete_columns is not None else []
        self.max_length = max_length
        self.tokenizer = AutoTokenizer.from_pretrained(model_name)
        self.inputs = self.preprocessing(self.data)

 

VSCode에 적용

1. 화면 좌측 하단 톱니 바퀴에서 설정 버튼 클릭

 

2. formatting provider 검색

 

3. black 선택

 

4. Format On Save 설정

 

위와 같이 설정하면 VSCode에서 파일을 저장할 때, 자동으로 코드 스타일을 PEP8에 맞게 수정해준다.

 

번외

import 순서를 정렬하고 싶다면 아래 코드를 VSCode의 settings.json 파일에 위 내용을 추가해주면 import의 순서가 정렬된다.

{
    "python.formatting.provider": "black",
    "[python]": {
        "editor.codeActionsOnSave": {
            "source.organizeImports": true
        }
    }
}

JSON 키("python.formatting.provider" 또는 "[python]")가 겹치는 것에 주의하자!