갑자기 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
"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해야한다.
3.은 혹시나 코딩중 방해를 받거나 editing 성능에 영향을 줄 것 같아 사용하지 않는다.
이 외에도 코딩환경 자동화를 위해 여러가지 설정하면 도움 되는 것들이 있지만 사용해 본후 다음에 더 정리할 예정이다.
참고1 : autopep8이나 yapf 등을 기본 formatter로 설정을 해도 잘 동작하지 않는 경우가 있었는데 MagicPython extension이 설치될 경우 Python file의 formatter를 찾는 것이 아니라 MagicPython file의 formatter를 찾는 증상이 있어 제대로 동작하지 않는 것으로 확인 됐다.
참고2 : flake8 이 죽는 경우pip uninstall attrs
후 다시pip install attrs
하면 해결되기도 함.