갑자기 python auto formmating 이 동작하지 않아 살펴보니 autopep8이 무슨 이유에서인지 동작하지 않는다.

그래서, formatter 를 yapf 로 바꾸고 나니 잘 동작하였고 이참에 linter와 formatter를 들여다 보게 되어 이참에 포매터를 결정하게 된 과정을 기록으로 남긴다.

linter로는 flake8을 선택했다 그 이유는 pylint가 참조하는 라이브러리들이 오래된 것을 사용했고 간결함에 있어서는 flake8이 더 끌렸다. 그래서 Linter는 flake8로 간단하게 결정했다.

포매터는 autopep8, yapf, black 중에 선택하게 되었는데.. 그야말로 자유도를 놓고 봤을 때 autopep8 > yapf > black 순으로 보인다. 아래는 주요 코딩 스타일을 비교해 볼 수 있는 예제 화면이다.

yapf 가 중간쯤이고 꽤 사용해볼 만 해서 이와 관련된 기본 설정 방법을 찾아보니 다음과 같다.
1. style.yapf 을 프로젝트 최 상위 폴더에 넣기

[style]
based_on_style = pep8
column_limit = 120
allow_split_before_dict_value = false
split_before_named_assigns = false
indent_width = 4
  1. vscode setting.json에 넣기
  "python.formatting.yapfArgs": [
    "--style",
    "{based_on_style: pep8, column_limit: 120, allow_split_before_dict_value: false, split_before_named_assigns: false, indent_width: 4}"
  ]

나는 아무래도 여러 머신에서 작업을 하니 vscode의 프로파일을 통해 sync되는 2번의 방법으로 설정한다.

단순히 포매터만 결정한다고 자동으로 코드를 포매팅해주는 것은 아니니 vscode 설정에 있는 다음의 설정들도 enable해야한다.

  1. Editor: Format On Paste
  2. Editor: Format On Save
  3. Editor: Format On Type

3.은 혹시나 코딩중 방해를 받거나 editing 성능에 영향을 줄 것 같아 사용하지 않는다.

이 외에도 코딩환경 자동화를 위해 여러가지 설정하면 도움 되는 것들이 있지만 사용해 본후 다음에 더 정리할 예정이다.

참고1 : autopep8이나 yapf 등을 기본 formatter로 설정을 해도 잘 동작하지 않는 경우가 있었는데 MagicPython extension이 설치될 경우 Python file의 formatter를 찾는 것이 아니라 MagicPython file의 formatter를 찾는 증상이 있어 제대로 동작하지 않는 것으로 확인 됐다.
참고2 : flake8 이 죽는 경우 pip uninstall attrs 후 다시 pip install attrs 하면 해결되기도 함.

profile
개발하면서 또는 프러덕 관리하면서 겪는 기억해둬야하는 내용을 메모장 삼아 남긴다. Google Keep이나 메모 도구에 남기는 것과는 달리 잘 정리할 수 있어서 언젠가 들춰봐야할 내용들을 담은 글들이 게시된다.

0개의 댓글