본문 바로가기
Python

Python 코드 포맷터 - black, isort

by 코드뭉치 2023. 4. 14.

Black

 

Python Black은 코드 스타일을 일관성 있게 유지하고 가독성을 높이기 위해 사용되는 코드 포맷터로,

코드를 스캔하고 적절한 들여쓰기와 라인 길이, 공백 등의 세부적인 스타일을 자동으로 지정해준다

 

또한 Black은 다른 도구와 연동하여 코드 포맷팅도 가능

 예를 들어, VSCode와 같은 IDE에서 Black 확장을 설치하거나, Git pre-commit hook으로 Black을 설정하여 코드 커밋 전에 자동으로 코드 포맷팅을 수행할 수 있다

 

black을 설치하고 사용하려면, 다음과 같이 명령어를 실행하면 된다.

pip install black

 

파일이 정렬이 필요한지 확인하기

$ black --check <파일명>.py
# 명령어 입력 시

would reformat <파일명>.py

Oh no! 💥 💔 💥
1 file would be reformatted.

 

그리고 다음과 같이 파이썬 파일을 정렬하면 끝.

black <파일명>.py
# 명령어 입력 시

reformatted <파일명>.py

All done! ✨ 🍰 ✨
1 file reformatted.

하나씩 실행하는 것이 상당히 귀찮다

 

그래서 VSCode의 경우, 아래 설정을 .vscode/settings.json에 추가해주기만 하면 파이썬 코드 편집기에서 변경된 코드를 저장할 때 마다 Black이 자동으로 실행되도록 설정할 수 있다

{
  "editor.formatOnSave": true,
  "python.formatting.provider": "black"
}

첫번째 설정은 코드가 저장할 때 마다 자동으로 포멧팅

두번째 설정은 VSCode의 기본 포멧터 대신에 Black을 사용

 

 


Isort 

 

isort는 Python 코드의 import문을 정렬해주는 도구

 

isort는 다양한 설정 옵션을 제공하여, 코드 스타일에 맞게 import문을 정렬할 수 있다. 

 

#isort를 사용 시 예시

from __future__ import unicode_literals

import json
import time

from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.forms.formsets import formset_factory
from django.forms.models import inlineformset_factory
from django.views.decorators.http import require_POST

from bibtexparser.bparser import BibTexParser
from bibtexparser.customization import convert_to_unicode

from parsifal.reviews.decorators import author_required, main_author_required
from parsifal.reviews.models import Review

from .forms import KeywordForm, SynonymForm


isort를 설치하고 사용하려면, 다음과 같이 명령어를 실행하면 된다.

pip install isort


그리고 다음과 같이 파이썬 파일을 정렬하면 끝.

# 특정 파일 정렬
isort <파일명>.py

# 여러개 파일
isort <파일명1>.py <파일명2>.py

# 디렉토리
isort <디렉토리명>

# 실행 후 변화 확인하기
isort <파일명>.py --diff

# 체크만..
isort <파일명>.py --check-only


isort는 대부분의 코드 에디터에서도 사용할 수 있으며, 코드 저장 시 자동으로 import문을 정렬해줄 수도 있습니다.

# 이렇게까지 써야하나 싶은 세팅

{
    "editor.formatOnSave": true,
    "[python]": {
        "editor.formatOnSave": true,
        "editor.codeActionsOnSave": {
            "source.organizeImports": true
        },
        "editor.formatOnType": true
    },
    "python.formatting.provider": "black",
    "python.formatting.blackPath": "black",
    "python.formatting.blackArgs": [
        "--line-length=88"
    ],
    "isort.args": [
        "--profile",
        "black"
    ],
}


	black을 포맷터로 사용
	isort를 black과 함께 사용
    저장시 isort 실행, black 실행
	타이핑 중에도 자동으로 코드 포맷팅
	코드 한 줄 길이 88자로 제한

댓글