일상적 이야기들.

[TIL] vscode - PEP8 관련 설정 잡기. 본문

프로그래밍/PYTHON

[TIL] vscode - PEP8 관련 설정 잡기.

noveljava 2020. 9. 9. 23:56

Python을 이용하는 많은 이들이 intelliJ나 pycharm을 많이 쓰고 있다. 그러나 IDE에 굳이 종속적으로 작업을 진행해야하나 싶기도 하고 비싼 돈을 주고 라이센스를 이용하기도 싫고, 사용하지 않는 기능들이 덕지덕지 붙어있는 것들이 싫어서 vscode를 사용하고 있다.
다른 언어를 사용할 때에도, 굳이 또 IDE를 설치할 필요없는 간편한 vscode !
그러나 홀로 vscode를 사용하다 보니, 팀원들과의 코드 인벤션이 맞지 않아 많은 고생을 하였다. 기본적으로 PEP8을 따르고 있는데, vscode의 기본인 pylint는 먼가 어설프게 pep8을 지켜주고 있었다. 그렇기에 대안으로 삼은 것이 다음과 같다.

Pycodestyle

pycodestyle은 vscode에서 pep8이라고 적혀있듯이 pep8을 충실히 잘 따르고 있다. 하지만 아쉽게도 한가지을 지원하지 않는데 사용되지 않는 import들에 대해서는 체크를 해주지 않는다.
해당 부분과 관련하여 많은 문서를 찾아봤는데, pylint의 경우에는 argvoption으로 w0614를 사용하게 되면 표시를 해준다고 하는데, pycodestyle은 해당 옵션을 줬을 시에 lint가 다운이 되는 현상이 있음을 확인을 하였다.

unused import관련하여서, 그렇게 큰 문제인가 싶기도 하지만 일단 import문이 있으면 해당 package정보를 읽어들이고 메모리상에도 적재가 되기때문에 불필요한 pakcage라면 최대한 import를 하지 않는 것이 좋으며, 와일드카드(*)를 이용하여 import하는 것도 왠만하면 권장하고 있지 않다. ( PEP8 문서 )

Wildcard imports (from import *) should be avoided, as they make it unclear which names are present in the namespace, confusing both readers and many automated tools. There is one defensible use case for a wildcard import, which is to republish an internal interface as part of a public API (for example, overwriting a pure Python implementation of an interface with the definitions from an optional accelerator module and exactly which definitions will be overwritten isn't known in advance).

Flake8

vscode에서 사용할 수 있는 lint로 flake8이 존재하며, flake8의 설명을 보면, "PyFlakes, pycodestyle, Ned Batchelder's McCabe script"를 포함하고 있다고 기재가 되어있다. ( flak8 github주소 )
그렇기에 pycodestyle의 기능을 모두 포함하고 있다고 생각하면 될 것 같다. vscode의 페이지에는 따로 flake8이 pep8을 따른다고 기재가 되어있지 않아서 flake8을 배제를 하였는데, 이번 기회를 통해서 알게 되었다.

Setting

Lint 설정

cmd+shift+p : command palette

  1. command palette 에서 python: select lint를 입력하여 flake8 선택
  2. command palette 에서 python: run linting을 통하여 lint 활성화

이렇게 하면, 기본적인 flake8 lint는 작동하게 된다.

Line 120글자 제한 옵션

하지만 해당 부분에서 불필요한 PEP8 정보들이 있을 수도 있다. 특히나 max-line을 80글자로 제한을 두는 pep8는 현시대에 맞지 않아서, 보편적으로 120글자를 제한으로 두고 있다. 그렇기에 해당 option을 바꾸도록 하자.

  1. command palette 에서 setting.json을 입력하여 Preferences: Open settings(Json) 선택
  2. 아래의 코드를 setting값으로 입력.

  "python.linting.flake8Args": [ "--max-line-length=120" ],
  "editor.rulers": [ 120 ],

editor.rulers 옵션은, vscode창에서 120번째 라인이 여기다라고 세로로 선을 긋어주는 옵션이다.

Auto Organize Python import

그리고, import에 대해서 자동으로 정렬하는 설정을 해두면 이쁘게 import를 그룹핑하여 정렬을 해준다.

  1. command palette 에서 setting.json을 입력하여 Preferences: Open settings(Json) 선택
  2. 아래의 코드를 setting값으로 입력.

  "[python]": {
    "editor.codeActionsOnSave": {
      "source.organizeImports": true
    }
  }

마무리

이렇게 해서 PEP8 관련의 기초적인 셋팅을 잡게 되었다. 당분간은 해당 셋팅으로 지내고 필요시에는 조금씩 더 보완을 해나가도록 해야겠다.

'프로그래밍 > PYTHON' 카테고리의 다른 글

Mac - Bigsur 에서 pyenv 문제  (0) 2021.01.03
[TIL] Pytest - mock server 구축  (0) 2020.09.23
[TIL] vscode - organizeImports 설정  (0) 2020.09.17
[TIL] lambda, TeypVar  (0) 2020.09.10
argparse - 실행 인자 사용법.  (0) 2020.04.01
Comments