pycharm vscode black 적용, pre-commit

x·2021년 5월 3일
1

vscode black 적용

vscode에서 black formatter 플러그인 설치

cmd+,으로 설정 열고 포매터 지정, on save 체크

저장할 때마다 자동 포매팅됨.

pycharm black 적용

전에는 pycharm에서 file watcher 설정을 해야했는데 tools black 설정만 해도 되는 것 같다. file watcher는 코드가 수정되고 조금 기다리면 자동으로 포맷팅을 해주는 Auto-save 옵션이 있다.
수동으로 저장할 때만 포맷팅을 적용하고 싶으면 Tools -> black만 설정하거나 file watcher에서 Auto-save 옵션을 체크하지 않으면 된다.

File Watcher 설정

pycharm에서 python 가상환경을 생성해주고 pip install poetry로 poetry라는 패키지 관리 도구를 설치한다.

poetry init으로 .toml 파일 생성 및 설정을 해준다.

poetry add black으로 black을 설치한다.

which black으로 black이 설치된 경로를 찾는다
당연하게도 프로젝트에서 생성한 가상환경에 잘 설치되어 있다
/Users/user_name/project/venv/bin/black

Pycharm preferences -> Tools -> File Watchers -> + 버튼 -> custom

아래 이미지처럼 설정

코드를 수정할 때마다 black을 적용하고 싶으면 Advanced Options를 펼치고 Auto-save ~ 체크 -> OK

Tools black 설정

참고
black docs

pyproject.toml

poetry를 사용한다면.
line-length의 default는 88이다. 노트북에서 창 분할을 자주 쓰거나, 코드가 한 줄로 길어지는 게 싫으면 80정도가 적당한 것 같다.

[tool.black]
line-length = 80
target-version = ['py310']

pre-commit 적용하기

pip install -r requirements.txt 또는 poetry install로 pre-commit 설치. rev는 black의 버전과 반드시 동일해야 함.
.pre-commit-config.yaml 파일 생성

repos:
-   repo: https://github.com/psf/black
    rev: 23.1.0
    hooks:
    - id: black
      language_version: python3.10
      args: ["--line-length=80"]

pre-commit install -> /.git/hooks/ 에 pre-commit 파일 생성됨

run 명령어 실행해서 pre-commit에 지정된대로 적용해볼 수 있다.
pre-commit run --all-files

black 포매팅 안하고 commit하면 에러남

vscode에 line-length 적용

pre-commit 실행 결과와 black 명령어 실행 결과가 다를 때

파이썬 인터프리터에 설치된 black 버전과 pre-commit에 설정된 black 버전이 같아야 하고 옵션도 동일해야 함
예를 들면 python 3.10과 black 24.4.0이면 설정은 다음과 같아야 함.

.pre-commit-config.yaml

repos:
  - repo: https://github.com/psf/black
    rev: 24.4.0
    hooks:
    - id: black
      language_version: python3.10
      args: ["--line-length=80"]

pyproject.toml

[tool.poetry.dependencies]
python = "3.10.14"
black = "24.4.0"

[tool.black]
line-length = 80
target-version = ['py310']
include = '\.pyi?$'

1개의 댓글

comment-user-thumbnail
2022년 1월 28일

감사합니다. 덕분에 수명이 늘었어요.

답글 달기