반응형

 

Python code formatter black 사용하기

 

공식 문서에서 black은 스스로 uncompromising (비타협적인) python code formatter라고 소개하고 있습니다. 비타협적이라는 것은 수동으로 hand-formatting 하는 대신에 black이 formatting 하는 것을 따라야 하며 커스터마이징이 쉽지 않다는 것을 뜻합니다. 실제로 configuration 없이 설치 후 바로 파이참에서 사용할 수 있었습니다. black도 당연히 PEP를 따르고 있으며, 사용해보니 꽤 가독성 좋은 formatting을 제공하고 있습니다.

 

pip로 설치는 다음과 같이 할 수 있습니다.

 

pip install black

 

더 자세한 내용은 공식 문서를 참고해주세요.

https://github.com/psf/black

 

GitHub - psf/black: The uncompromising Python code formatter

The uncompromising Python code formatter. Contribute to psf/black development by creating an account on GitHub.

github.com

 

 

 

파이참 file watchers로 black 적용하기

 

black을 설치했다면, 파이참에서 파일을 세이브할 때마다 black을 이용해 자동으로 파이썬 코드를 포매팅하도록 설정할 수 있습니다. 방법은 다음과 같습니다.

 

Settings -> Tools -> File Watchers로 들어가서 + 버튼을 눌러 템플릿을 추가합니다.

 

파이참 File Watchers Template 추가

 

그리고 아래 사진과 같이 내용을 수정합니다.

 

black을 적용하는 템플릿

 

File type은 Python으로, Program은 black이 설치된 경로를 넣어줍니다.

Arguments에는 $FileDirRelativeToProjectRoot$, Output paths to refresh에는 $FileDir$, Working directory에는 $ProjectFileDir$를 각각 넣어줍니다.

Advanced Options는 디폴트 상태로 저장하면 코드를 타이핑할 때마다 너무 자주 black이 적용돼서 불편함이 있습니다. 그래서 저는 파일을 저장할 때에만 black이 적용되도록 Advanced Options에서 모든 체크를 해제했습니다.

 

 

 

black을 git pre-commit hook에 적용하기

 

CI 프로세스중 하나인 pre-commit hook에 black을 적용하여 commit전에 항상 코드 포매팅 검사를 할 수 있습니다.

 

공식 문서에 pre-commit 사용법이 자세히 나와있습니다.

https://pre-commit.com/

 

pre-commit

 

pre-commit.com

 

pip로 pre-commit을 설치하는 명령어는 다음과 같습니다.

 

pip install pre-commit

 

pre-commit을 설치했으면 프로젝트 루트 디렉터리에 .pre-commit-config.yaml파일을 만들고 파일 안에 configuration을 작성하고 저장합니다.

 

repos:
-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v2.3.0
    hooks:
    -   id: check-yaml
    -   id: end-of-file-fixer
    -   id: trailing-whitespace
-   repo: https://github.com/psf/black
    rev: 21.12b0
    hooks:
    -   id: black

 

다음으로 터미널에서 pre-commit scripts를 설치합니다.

 

pre-commit install

 

이제 커밋을 할 때마다 black으로 검사를 실행할 것입니다.

 

pre-commit 실행 결과

 

 

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기