programing

Python 코드를 PEP8 호환으로 변환하는 도구

newstyles 2023. 8. 2. 08:52

Python 코드를 PEP8 호환으로 변환하는 도구

들어 온라인 서비스와 파이썬 모듈이 모두 있는 등 파이썬 코드가 PEP8과 호환되는지 검증하는 도구가 있다는 것을 알고 있습니다.

그러나 Python 파일을 자체 포함된 PEP8 유효한 Python 파일로 변환할 수 있는 서비스나 모듈을 찾을 수 없습니다.혹시 있는지 아는 사람?
PEP8은 코드의 외형에 관한 것이기 때문에 가능한 것으로 생각합니다. 그렇죠?

autop8을 사용할 수 있습니다!당신이 스스로 커피 한 잔을 만드는 동안 이 도구는 코드의 의미를 바꾸지 않는 성가신 모든 PEP8 위반을 행복하게 제거합니다.

파이프를 통해 설치:

pip install autopep8

특정 파일에 적용:

autopep8 py_file --in-place

또는 프로젝트에 대한 자세한 내용은 프로젝트 진행 상황에 대한 피드백을 제공합니다.

autopep8 project_dir --recursive --in-place --pep8-passes 2000 --verbose

참고: 기본 패스 100개로는 부족할 때가 있습니다. 상당히 높고 가장 문제가 많은 파일을 제외한 모든 파일을 캡처하기 때문에 2000개로 설정했습니다(해결 가능한 pep8 위반을 찾지 못하면 패스가 중단됨).

이 시점에서 다시 테스트하고 커밋을 수행할 것을 제안합니다!

"전체" PEP8 준수를 원하는 경우: 위와 같이 autopep8을 실행한 다음 나머지 위반(파일, 줄 번호 및 기타)을 인쇄하는 PEP8을 실행하는 방법이 방법은 다음과 같습니다.

pep8 project_dir --ignore=E501

수동으로 변경할 수 있습니다(예: E712s - 부울과 비교).

은 "autopep8"을 합니다.--aggressive논쟁(이 의미를 바꾸는 위반을 무자비하게 "수정"하기 위해), 하지만 공격적으로 사용할 경우 디버깅해야 할 수도 있습니다.(예: numpy/message 단위)True == np.bool_(True)하지만 아닙니다.True is np.bool_(True)!)

각 유형(전/후)의 위반 수를 확인할 수 있습니다.

pep8 --quiet --statistics .

참고: E501(줄이 너무 깁니다)은 코드에 많은 수가 있을 것이고 때때로 autopep8에 의해 수정되지 않을 수 있기 때문에 특수한 경우라고 생각합니다.

예를 들어, 저는 이 기술을 판다 코드 베이스에 적용했습니다.

불행히도 "pep8 스톰"(전체 프로젝트)은 몇 가지 부정적인 부작용을 가지고 있습니다.

  • 많은 합병증
  • 비난을 퍼붓다
  • 코드 검토를 어렵게 합니다.

대안으로 (그리고 아이디어에 대한 @y-p 덕분에) 마지막 커밋/분기 이후로 작업 중인 라인만 자동으로 8단계로 자동화하는 작은 패키지를 작성했습니다.

기본적으로 프로젝트를 시작하는 것당신이 발견한 것보다 조금 더 낫습니다.

pip install pep8radius

당신이 당신의 일을 끝냈다고 가정합니다.master다음을 수행할 준비가 되었습니다.

# be somewhere in your project directory
# see the diff with pep, see the changes you've made since master
pep8radius master --diff
# make those changes
pep8radius master --diff --in-place

또는 마지막 커밋 이후 커밋한 새 행을 치료하려면 다음을 수행합니다.

pep8radius --diff
pep8radius --diff --in-place

# the lines which changed since a specific commit `git diff 98f51f`
pep8radius 98f51f --diff

기본적으로 마지막 공유 커밋에서 git/hg diff 출력의 라인에 autopep8을 적용하는 것입니다.

이 스크립트는 현재 git 및 hg와 함께 작동합니다. 만약 당신이 다른 것을 사용하고 있고 이것이 작동하기를 원한다면 댓글/이슈/PR을 올려주세요!

@Andy Hayden은 autop8에 대해 좋은 개요를 제공했습니다.그 외에도 pep8ify라는 패키지가 하나 더 있는데, 이 패키지는 동일한 기능을 합니다.

그러나 두 패키지 모두 보풀 오류만 제거할 수 있지만 코드를 포맷할 수는 없습니다.

little = more[3:   5]

위의 코드는 pep8ifying 후에도 동일하게 유지됩니다.하지만 아직 코드가 좋아 보이지 않습니다.코드가 PEP8을 준수하더라도 코드를 포맷하는 yapf와 같은 포맷을 사용할 수 있습니다.위 코드의 형식은 다음과 같습니다.

little = more[3:5]

때로는 수동 형식이 삭제되기도 합니다.예를들면

BAZ = {
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12]
}

로 변환됩니다.

BAZ = {[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]}

하지만 어떤 부분은 무시하라고 할 수 있습니다.

BAZ = {
   [1, 2, 3, 4],
   [5, 6, 7, 8],
   [9, 10, 11, 12]
}  # yapf: disable

이전 블로그 게시물에서 가져온 것:PEP8 & Python 코드 자동 포맷!

저는 파이썬과 코드 스타일을 위한 다양한 악기에 대해 광범위한 연구를 했습니다.두 가지 유형의 계측기가 있습니다. 즉, 링터는 코드를 분석하고 잘못된 사용 코드 스타일에 대한 경고를 제공하며 이를 수정하는 방법과 코드 형식을 표시합니다. 파일을 저장할 때 PEP 스타일을 사용하여 문서를 다시 포맷합니다.

다시 포맷하는 것이 더 정확해야 하기 때문에, 만약 당신이 원하지 않는 것을 다시 포맷하면, 그것들은 PEP의 더 적은 부분을 커버하고, 린터는 훨씬 더 많은 것을 보여줍니다.

예를 들어 모든 규칙에서 구성 가능한 파일인터(모든 유형의 경고를 설정/해제할 수 있음), 검은색은 전혀 구성할 수 없는 등 구성 권한이 모두 다릅니다.

다음은 유용한 링크 및 자습서입니다.

설명서:

  • PEP-257 문서 문자열 규칙: https://www.python.org/dev/peps/pep-0257/
  • PEP-484 유형 힌트: https://www.python.org/dev/peps/pep-0484
  • 크롬 스타일 가이드 https://chromium.googlesource.com/chromiumos/docs/+/master/styleguide/python.md
  • 자동 테스트를 위한 코드 스타일 https://chromium.googlesource.com/chromiumos/third_party/autotest/+/master/docs/coding-style.md
  • 아카데미 코딩 스타일 가이드 https://github.com/Khan/style-guides/blob/master/style/python.md
  • 파이썬을 위한 히치하이커 가이드 https://docs.python-guide.org/
  • EdX Python 스타일 가이드 https://edx.readthedocs.io/projects/edx-developer-guide/en/latest/style_guides/python-guidelines.html
  • RealPython https://realpython.com/python-pep8/ 에 대한 코드 스타일 기사

린터(인기순서):

  • mypy https://github.com/python/mypy 유형 검사용 린터(PEP-484)
  • pycodstyle https://github.com/PyCQA/pycodestyle - PEP-8을 사용한 좋은 제품, 매우 인기가 있습니다.종종 pylint 및 flake8(동시)과 함께 사용됩니다.
  • pylint https://github.com/PyCQA/pylint 매우 구성 가능하고, 적극적으로 지원됩니다.
  • 밴디트 https://github.com/PyCQA/bandit 안전 점검
  • 프로스펙터 https://github.com/PyCQA/prospector pylint+코드 난이도 검사
  • flake8 https://github.com/PyCQA/flake8 플러그인을 켤 수 있는 피코드스타일 래퍼.구성 가능한 다양한 플러그인 목록이 매우 많습니다.여기 멋진 플레이크 8 레포가 있습니다: https://github.com/DmytroLitvinov/awesome-flake8-extensions
  • 우리는 https://github.com/wemake-services/wemake-python-styleguide 을 만듭니다 - 하나의 프로젝트에 많은 다른 린터들을 결합하려고 노력합니다 (실제로 그것은 다른 린터들의 스타일을 결합한 플레이크 8 플러그인입니다).
  • pylama https://github.com/klen/pylama 는 10개의 다른 린터(mypy, pylint, pycodstyle, pydocstyle 등)를 하나로 결합하려고 합니다.저는 여기서 단 하나의 문제를 볼 수 있습니다 - 오래된 버전(약 10개월 동안 github repo에 업데이트가 없음).
  • pydocstyle https://github.com/PyCQA/pydocstyle docstrings 린터(PEP-257)

코드 형식 지정자(인기순서):

  • black https://github.com/psf/black 가장 대중적인 포맷터, 몇몇 큰 회사에서 사용됩니다.yapf보다 나중에 생성되었지만 GitHub에는 이미 더 많은 시작이 있습니다.
  • yapf https://github.com/google/yapf 구글 코드 포맷터
  • autoep8 https://github.com/hhatto/autopep8 피코드 스타일을 기반으로 빌드

eclipse + PyDev를 사용하는 경우 PyDev의 설정에서 autopep8을 활성화하기만 하면 됩니다.Windows -> 기본 설정 -> 검색 필터에 'autopep8'을 입력합니다.

'코드 포맷은 autopep8.py 사용?'을 확인하십시오.

이제 이클립스의 CTRL-SHIFT-F 코드 포맷은 autopep8을 사용하여 코드를 포맷해야 합니다 :)

screen shot

많이 있습니다.

IDE에는 일반적으로 일부 형식 지정 기능이 내장되어 있습니다.IntelliJ Idea / PyCharm은 Eclipse용 Python 플러그인도 마찬가지입니다.

여러 언어를 대상으로 할 수 있는 포맷터/린터가 있습니다.https://coala.io 이 그것들의 좋은 예입니다.

그 다음에는 단일 목적 도구가 있으며, 그 중 많은 것이 다른 답변에 언급되어 있습니다.

자동 재포맷의 한 가지 구체적인 방법은 파일을 AST 트리로 구문 분석한 다음(댓글을 삭제하지 않고) 텍스트로 다시 덤프하는 것입니다(원래 형식은 보존되지 않습니다).를 들어 https://github.com/python/black 이 있습니다.

언급URL : https://stackoverflow.com/questions/14328406/tool-to-convert-python-code-to-be-pep8-compliant