VSCode의 Python 개발 환경에서 pylint 대신 flake8을 가져와 자동 성형을 설정합니다

flake8이 뭐예요?


flake8은python의 다음 세 가지 오류 검사 모듈의 포장기입니다.
  • pep8: 코드 스타일이 PEP8에 맞는지 확인합니다
  • pyflakes: 코드의 논리적 오류 검사(스타일 검사 제외)
  • mccabe: 코드의 순환 복잡도 검사(정의식으로 지점과 순환을 수치화하는 것 같다)
  • 중요한 건 추천하는 잘못된 검사를 안고 이걸 넣으면 안심이 되는데... 그렇게 생각하면 되는데... (땀)
    참고로 패키지 모듈의pep8은 최근 pycodestyle이라는 이름으로 바뀐 것 같아서 flake8을 설치하면 pycodestyle가pep8 대신 관련 모듈로 설치됩니다.

    VSCode의 가져오기 방법은?


    결론적으로 flake8을 통해 VScode의 코드에 대한 오류 검사와 형식 성형을 적용하려면 VScode 설정에서 다음과 같은 설정을 하고python 실행 환경(또는 가상 환경)에 필요한 모듈을 설치하여 실현할 수 있다.

    VScode 설정


    구성 이름
    기능
    값 설정
    python.linting.enabled
    Lint 기능 활성화 여부
    true
    python.linting.pylintEnabled
    Linter에서 pylint 사용 여부
    false
    python.linting.flake8Enabled
    Linter에서 flake8 사용 여부
    true
    python.linting.lintOnSave
    파일을 저장할 때 Lint 실행
    true
    python.formatting.provider
    무엇으로 파이썬 코드를 성형합니까
    autopep8
    editor.formatOnSave
    파일을 저장할 때 자동 성형 여부
    true

    설치 모듈


    다음 명령을 사용하여 필요한 모듈을 설치합니다.
    pip install flake8
    pip install autopep8
    
    그럼 제가 도입 순서를 구체적으로 기재하겠습니다.

    pylint 사용 안 함


    VSCode에서 pylint는 기본적으로 활성화되어 있으므로 먼저 비활성화합니다.
    먼저 VScode 왼쪽 아래에 있는 기어 아이콘에서 메뉴를 열고 설정을 클릭하여 설정을 엽니다.(VScode 1.28.x부터 settings.json 파일을 직접 편집하는 규격부터 바뀐 것 같다)

    검색창에python이 있습니다.linting.필터링을 위해 pylintEnabled를 입력하면 Pylint의 Enabled 설정이 표시되며 그림과 같이 선택을 취소합니다.

    겸사겸사 말씀드리지만, 선택 취소를 통해, settings.json의 아래와 같은 의미.
    "python.linting.pylintEnabled": false
    
    설정 후 표시되는 토스트 알림을 닫으면 나중에 표시되지 않습니다.
    그리고python의linting을 사용합니다 ("python.linting.enabled":true) (기본값이true이면 변경할 필요가 없습니다).

    flake8 가져오기


    python.linting.flake8을 검색하고 활성화합니다.
    "python.linting.flake8Enabled": true
    
    변경 후 토스트 알림은 영어로'flake8이 없습니다'라는 정보를 표시하기 때문에 직접 설치하거나 환경에서 다음 명령을 통해pep8을 설치합니다.
    pip install flake8
    

    파일을 저장할 때 linting 검사로 설정


    검색창에python이 있습니다.linting.표시를 필터링하고 lintOnSave를 활성화하면 파일을 저장할 때 오류 검사가 발생합니다.
    "python.linting.lintOnSave": true
    

    자동 성형 형식 설정


    마우스 오른쪽 버튼 클릭
    pep8(pycodestyle)을 사용하여 자동으로 성형하도록 설정합니다.

    pep8에서 자동 성형 형식 지정하기


    PEP8 자동 성형에 따라 검색란을 통해python을 진행합니다.formatting.provider를 찾고 autopep8을 선택하면 자동 성형 형식을pep8로 지정합니다.
    (flake8의 코드 스타일은pep8(엄격히는pycodestyle)이기 때문에pep8에 부합되는 성형 모듈 autopep8을 포맷기로 지정합니다.)
    "python.formatting.provider": autopep8
    
    설정과 동시에 Python 환경에도 autopep8을 설치합니다.
    pip install autopep8
    
    # Collecting autopep8
    # Collecting pycodestyle>=2.4.0 (from autopep8)
    #   Using cached https://files.pythonhosted.org/packages/e5/c6/ce130213489969aa58610042dff1d908c25c731c9575af6935c2dfad03aa/pycodestyle-2.4.0-py2.py3-none-any.whl
    # flake8 3.5.0 has requirement pycodestyle<2.4.0,>=2.0.0, but you'll have pycodestyle 2.4.0 which is incompatible.
    # Installing collected packages: pycodestyle, autopep8
    #   Found existing installation: pycodestyle 2.3.1
    #     Uninstalling pycodestyle-2.3.1:
    #       Successfully uninstalled pycodestyle-2.3.1
    # Successfully installed autopep8-1.4.2 pycodestyle-2.4.0
    
    autopep8은 형식적으로 참고하는pycodestyle을 관련 모듈로 참조하여 설치합니다.
    메뉴에서'문서 모피'를 오른쪽 단추로 누르면 pep8 (pycodestyle) 에서 자동으로 성형할 수 있습니다.

    저장 시 자동 성형으로 설정


    검색 표시줄의 편집기.자동 성형을 위해 formatonSave를 활성화로 설정합니다.
    "editor.formatOnSave" : true
    
    위에서 설명한 바와 같이 파일을 저장할 때 자동으로 성형됩니다.
    (flake8과 autopep8) 모듈마다 필요한pycodestyle 버전이 다르면lint나 자동 성형이 성공하지 못할 수 있습니다.이 경우 의존 관계 모듈 pipdeptree에서 조사 패키지의 의존 관계를 검사함으로써 버전의 충돌을 조사할 수 있기 때문에 임의의 조건을 만족시키는 pycodestyle의 버전으로 변경하거나 둘 다 만족할 수 없는 상황에서 우선적인 기능을 협조한다pycodestyle의 버전을 변경하십시오.
    pip install pipdeptree
    
    패키지의 의존 관계를 확인하기 위해 설치된 pipdeptre 모듈을 실행하면 autopep8에 필요한 pycodestyle 버전은 2.4.0 이상이고 설치된 버전은 2.3.1이기 때문에 일치성을 얻을 수 없습니다.
    pipdeptree
    
    # autopep8==1.4.2
    #   - pycodestyle [required: >=2.4.0, installed: 2.3.1]
    # flake8==3.5.0
    #  - mccabe [required: >=0.6.0,<0.7.0, installed: 0.6.1]
    #  - pycodestyle [required: >=2.0.0,<2.4.0, installed: 2.3.1]
    #  - pyflakes [required: >=1.5.0,<1.7.0, installed: 1.6.0]
    
    찾아보니 flake8이 3.6.0으로 업데이트되었기 때문에 최신 버전으로 업데이트를 시도해 보았습니다.
    pip install flake8 -U
    
    버전과 의존 관계를 재확인한 후flake8의 버전이 3.6.0으로 업데이트됨에 따라pycodestyle의 버전도 2.4.0 이상으로 업데이트되어 autopep8과 일치성을 유지했다.
    pipdeptree
    
    # autopep8==1.4.2
    #   - pycodestyle [required: >=2.4.0, installed: 2.4.0]
    # flake8==3.6.0
    #   - mccabe [required: >=0.6.0,<0.7.0, installed: 0.6.1]
    #   - pycodestyle [required: >=2.4.0,<2.5.0, installed: 2.4.0]
    #   - pyflakes [required: >=2.0.0,<2.1.0, installed: 2.0.0]
    #   - setuptools [required: >=30, installed: 40.4.3]
    # pipdeptree==0.13.1
    #   - pip [required: >=6.0.0, installed: 18.1]
    # wheel==0.32.1
    
    최신 버전의flake8이 설치되어 있지만 autopep8의 요청pycodestyle과 일치하지 않으면flake8이나 autopep8의 최신 버전이 업데이트된 후에 업데이트하는 것이 좋습니다.
    모듈을 설치할 때 pycodestyle의 일치성을 얻지 못하거나 PEP8을 기억하고 싶은 경우 저장할 때의 자동 성형 기능을 과감히 차단하고 PEP8을 알았을 때 pycodestyle의 일치성을 재조정하여 자동 성형을 ON으로 설정하여 효율화를 도모하는 것도 방법이겠죠.

    flake8의 오류 검사에서 pycodestyle (pep8) 의 문자수 제한을 제거합니다


    표준 인코딩 규칙인 PEP8의 행당 문자 수는 79자로 제한되어 있기 때문에 제한이 좀 엄격합니다.(안 좋을 수도 있지만) 80자 이상의 오류를 피하려면 이 오류 검사를 취소해야 합니다.
    구체적으로 말하면 패키지flake8을 실행할 때의 매개 변수에서 오류를 무시하는 값을 지정합니다.
    설정된 검색창에 flake8args를 입력하여 항목을 필터링한 다음 "settings.json에서 편집"을 누르면 항목을 열 수 있습니다.

    열린 settings.제이슨의python.linting.마우스 커서를 flake8Args로 이동하면 왼쪽에 펜 같은 편집 아이콘이 표시되기 때문에 "설정으로 복사하기"를 누르면 항목을 사용자 설정으로 복사합니다. 복사된python입니다.linting.flake8Args의 괄호 안에 "--ignore=E501"을 입력하고 저장합니다.

    이상, 글자 수 제한의 오류 검사를 배제할 수 있습니다.

    참조 사이트

  • https://blog-ja.sideci.com/entry/python-lint-pickup-5tools
  • http://www.atmarkit.co.jp/ait/articles/1711/24/news034_3.html
  • 좋은 웹페이지 즐겨찾기