토이프로젝트/파이썬 취미활동

개발환경 - vscode 에서 python pylint mypy formatter 기본설정하기 (설정예제)

. . . 2022. 12. 26. 16:51
반응형

vscode 에서의 python 환경 pylint mypy 등을 정리한다.

  • 파이썬을 취미로 개발하기 앞서, 코드를 깔끔하게 작성하고싶어 자료조사한것을 정리
  • 실제 현업에서는 어떻게 적용하고 사용하는지는 모르겠다.

1 pylint 설정

아무래도 import path 라 던가 각 워크스페이스마다의 요구사항이 조금씩 다를것이므로... 전역으로 설정하지 말고, 각 work space 마다 설정 하는것이 맞는것같다.

.vsocde/settings.json 를 생성(파일이 있다면 추가) 한다.

1.1 pylint 설치

pip3 install pylint 를 통해서 pylint 패키지를 설치하자.

1.2 vscode pylint 플러그인 설치

vscode 의 pylint 플러그인을 설치한다.

pylint 플러그인 설치

1.3 pylint 기본설정

pylint 엔진은 여러가지가 존재하나, 인터넷에 많이 나와있는 자료들이, pylint 기반의 내용이 많이 나와있어 아무래도 구글의 도음을 많이 받을 수 있었다.

.vsocde/settings.json 에서 다음의 내용을 enable 시킨다.

{
    "python.linting.pylintEnabled": true,
    "python.linting.enabled": true,
}

.vsocde/settings.json 를 수정한 후에는 vscode 를 재실행하자.

1.4 pylint import path 설정

vscode 의 pylint 기본설정은 import path 에러가 발생한다.

scipt 정적검증이다보니, 스크립트내에서의 import sys path 에 대해서는 인지를 하지 못한다. 때문에, pylint 에서 sys path 에 대해서 설정을 따로 해줘야, 문제가 발생하지 않는다.

작업하려는 영역에 .vscode/settings.json 파일을 추가하여 다음의 내용을 추가한다.

{
    "python.linting.pylintArgs": [
        "--init-hook",
        "import sys; sys.path.append(\"YOUR_PATH\");",
    ],
}
  • python lint 가 실행될때 --init-hook 옵션을 통해서 sys path 를 추가한다. (코드에서 의도한 sys path 영역에 대해서 위와같이 설정해준다.)
  • 해당 syntax 를 제대로 적지 않으면, 아예 pylint 가 실행되지 않으니 python 문법에 맞게 잘 설정한다.

1.5 pylint rule skip

필요없는(?) 룰들로 인해 너무 많이 에러가 발생하는경우가 있다.

vscode 에서 다음과같은 에러가 발생했다고 하면...

too long error

에러의 상세내용에.. pylint(C0301:line-too-long) 과 같이 상세 이유(코드)가 나오게 된다. (100단어는 너무 짧다고 생각하여 끄고싶다.)

해당 만약 해당 내용에 대해서는 pylint 에서 검사를 건너뛰게 하고싶으면, .vscode/settings.json 파일에서 python.linting.pylintArgs 부분에 --disable 옵션을 사용하면된다.

{
    "python.linting.pylintArgs": [
        "--init-hook",
        "import sys; sys.path.append(\"YOUR_PATH\");",
        "--diable",
        "C0301"
    ],
}
  • 주의할점은 기존 옵션들이 이어져야 한다는점이다.
  • python.linting.pylintArgs 가 여러개 있으면안된다. 한개의 키 부분에 계속 옵션을 추가해 나간다.

1.6 미동작관련

만약, pylint 가 동작이 되지 않을경우 다음의 순서대로 해보자.

  1. .vscode/settings.json 이 제대로 구성되어있는지 확인해본다. (해당 파일에서 json 형식이 맞지 않거나, 설정키들이 잘못되면 아예 pylint 플러그인이 실행되지 않는다.)
  2. package 들이 정상 설치되어있는지 확인한다. (pylint 패키지가 설치 되어있는지 확인해본다.)
  3. ctrl + shift + p 를 눌러서 vscode 의 pylint 관련 커맨드들에서... pylint 실행, pylint 서버재시작 명령어들을 통해서 직접 실행 혹은 재시작한다.

pylint setting 에서 적당한거 골라서 시작, 재시작등을 만져보자

2 black 포멧팅 설정

포멧팅엔진도 여러개가 있다. 검색을 해보니 black 포멧터를 많이 쓰는것같다.

아무래도 import path 라 던가 각 워크스페이스마다의 요구사항이 조금씩 다를것이므로... 전역으로 설정하지 말고, 각 work space 마다 설정 하는것이 맞는것같다.

.vsocde/settings.json 를 생성(파일이 있다면 추가) 한다.

2.1 black 설치

pip3 install black 를 통해서 black 패키지를 설치하자.

2.2 vscode pylint 플러그인 설치

vscode 의 pylint 플러그인을 설치한다. (pylint 플러그인 안에 포메팅 관련 기능도 포함되어있다.)

pylint 플러그인 설치

2.3 black 동작시키기 (settings.json 설정)

작업하려는 영역에 .vscode/settings.json 파일을 추가하여 다음의 내용을 추가한다.

    "editor.formatOnSave": true,
    "python.formatting.provider": "black",
  • "python.formatting.provider": "black", 파이썬 포메터는 black으로 설정
  • "editor.formatOnSave": true 옵션을 통해서 저장을 할경우 알아서 이런저런 포메팅을 수정해준다. (코드가 깔끔해진다.)

3 mypy 설정

코드를 안정적으로 동작시키기 위해서 mypy 도 설정한다.

아무래도 import path 라 던가 각 워크스페이스마다의 요구사항이 조금씩 다를것이므로... 전역으로 설정하지 말고, 각 work space 마다 설정 하는것이 맞는것같다.

.vsocde/settings.json 를 생성(파일이 있다면 추가) 한다.

3.1 mypy 설치

pip3 install mypy 를 통해서 mypy 패키지를 설치하자.

3.2 vscode pylint 플러그인 설치

vscode 의 pylint 플러그인을 설치한다. (pylint 플러그인 안에 mypy 관련 기능도 포함되어있다.)

pylint 플러그인 설치

3.3 mypy 설정 (settings.json 설정)

.vscode/settings.json 파일에 다음의 내용을 추가한다.

{
    "python.linting.mypyEnabled": true,
    "python.linting.mypyArgs": [
        "--follow-imports=silent",
        "--ignore-missing-imports",
        "--show-column-numbers",
        "--no-pretty",
    ],
}
  • mypy args 는 기본설정대로 쓰자.

4 결론

4.1 settings.json 예제

위에서 설명했던 설정에 대해서 모두 정리하면 다음과 같다.

{
    "python.linting.pylintArgs": [
        "--init-hook",
        "import sys; sys.path.append(\"YOUR_PATH\");",
        "--disable",
        "C0301" // too long line
    ],
    "python.linting.pylintEnabled": true,
    "python.linting.enabled": true,
    "editor.formatOnSave": true,
    "python.formatting.provider": "black",
    "python.linting.mypyEnabled": true,
    "python.linting.mypyArgs": [
        "--follow-imports=silent",
        "--ignore-missing-imports",
        "--show-column-numbers",
        "--no-pretty",
    ],
}

기본적으로 위의 설정을 .vcode/settting.json 에 넣는다면 에디팅 레벨에서 깔끔한 코드를 작성할 수있다.

4.2 코드에러 검출 예제

#!/bin/python

class abcdEfg:
    def abc(ddd: str = None) -> str:
        print(ddd)

if __name__ == "__main__":
    ccc = abcdEfg()
    ccc.abc()

위의 코드의 경우... 기본적으로 다음의 에러가 검출되었다.

pylint mypy argument type error

pylint function doc string error

pylint doc string error

pylint class naming error

발생된 에러의 경우 흥미로웠다. vscode에서 pylint / mypy 등의 설정만으로도... 에디팅을 하는 과정에서 기본적인 코드에 대한 최소한의 품질은 유지시킬수 있었다. 특히 변수설정이나, 함수의 네이밍규칙등도 걸러주고, 함수간의 엔터겟수, import 순서등도 다 검출해서 알려주니 오류검출은 떠나서라도 이쁜 코드를 만들 수 있었다.

위의 플러그인 설정들은 에디팅 과정에서의 에러다보니, error 가 발생하더라도, 일단 동작상에는 문제가 없을 수도 있다. 하지만, python 정적 분석 툴을 돌리기 전에 최소한의 코드 품질을 위해서 에디팅 과정에서의 에러가 없게 하는것이 좋을것같다.

4.3 각종 python 기능에 대한 사용 자원 이슈 - 라즈베리파이는 원할한 동작불가

vscode 에서 python lint, fomatting 기능은 기본적으로 백그라운드에서 이런저런 동작이 일어난다. linux 의 경우 node, python 스크립트들이 백그라운드에서 계속적으로 코드의 import path, lint 등을 수행한다.

일반적인 x86 pc의 경우 백그라운드에서 동작되는 해당 기능들이 PC동작에 큰 무리를 주지는 않는다. (7년정도 된 집의 구형 셀러론D 에서도 크게 문제없이 lint 등의 모든 기능들이 동작되었다. )

하지만 라즈베리 파이의 경우는 좀 달랐다.

라즈베리파이에서 vscode ssh code server 띄워놓고 위의 플러그인 테스트를 해보니, 라즈베리파이가 터지려고한다. (시스템이 계속 종종 다운된다 ㅠㅠ) 아무래도 위의 기능들이 라즈베리에서 다 돌리기에는 무거운 모양이다. 라즈베리파이 vscode server 환경에서는 위의 모든 기능을 사용하지 못할 수도 있다.

PC에서 기본 기능개발을 모두다 개발 하고, 최종 실행 코드만 라즈베리파이로 옮기는 것으로 진행중이다.

4.4 파이썬 취미개발자로서...

그냥 취미로 개발하다가 정리한내용이다. 실제 현업에서는 어떻게 적용하고 사용하는지는 모르겠다.

재밌는 파이썬이다.

...

  • 본 포스팅은 obsidian 으로 작성하였으며, tistory-posting-cli 를 이용해 발행되었습니다.
반응형