Python 코드가 PEP8을 준수하는지 확인하는 도구가 있다는 것을 알고 있습니다. 예를 들어 온라인 서비스 와 python 모듈 이 모두 있습니다.
그러나 내 Python 파일을 자체 포함 된 PEP8 유효한 Python 파일 로 변환 할 수있는 서비스 또는 모듈을 찾을 수 없습니다 . 아무도 있는지 아는 사람이 있습니까?
PEP8은 모두 코드의 모양에 관한 것이기 때문에 가능하다고 생각합니다.
Python 코드가 PEP8을 준수하는지 확인하는 도구가 있다는 것을 알고 있습니다. 예를 들어 온라인 서비스 와 python 모듈 이 모두 있습니다.
그러나 내 Python 파일을 자체 포함 된 PEP8 유효한 Python 파일 로 변환 할 수있는 서비스 또는 모듈을 찾을 수 없습니다 . 아무도 있는지 아는 사람이 있습니까?
PEP8은 모두 코드의 모양에 관한 것이기 때문에 가능하다고 생각합니다.
답변:
불행히도 "pep8 스토밍"(전체 프로젝트)에는 몇 가지 부정적인 부작용이 있습니다.
대안으로 (그리고 아이디어에 대한 @yp 덕분에 ) 마지막 커밋 / 브랜치 이후로 작업 한 줄만 autopep8s하는 작은 패키지를 작성했습니다.
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
기본적으로 pep8radius
autopep8을 git / hg diff 출력의 행에 적용 합니다 (마지막 공유 커밋에서 ).
이 스크립트는 현재 git 및 hg와 함께 작동합니다. 다른 것을 사용하고 이것이 작동하기 를 원한다면 댓글 / 문제 / PR을 게시하십시오 !
autopep8 을 사용할 수 있습니다 ! 커피 한 잔을 만드는 동안이 도구 는 코드 의 의미 를 변경하지 않는 모든 성가신 PEP8 위반을 행복하게 제거합니다 .
pip를 통해 설치하십시오.
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와 / 팬더 True == np.bool_(True)
가 아니라 True is np.bool_(True)
!)
pep8 --quiet --statistics .
참고 : E501 (너무 긴 줄)은 코드에 이러한 항목이 많을 수 있고 때로는 autopep8에 의해 수정되지 않는 특수한 경우라고 생각합니다.
pep8
답변에 언급 된 패키지의 이름이 github.com/PyCQA/pycodestyle/releases/tag/1.7.1pycodestyle
@Andy Hayden은 autopep8에 대한 좋은 개요를 제공했습니다. 그 외에도 동일한 작업을 수행하는 pep8ify 라는 패키지가 하나 더 있습니다.
그러나 두 패키지 모두 Lint 오류 만 제거 할 수 있지만 코드 형식을 지정할 수는 없습니다.
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 코드 형식 지정!
little = more[3: 5]
pep8 (라이브러리)의 버그? yapf는 확실히 미래이며, 그 뒤에있는 알고리즘 (기본적으로 모든 서식 옵션의 그래프에서 가장 짧은 경로)은 매우 우아한 솔루션이며 표준 서식뿐만 아니라 버그도 적을 것입니다.
저는 파이썬과 코드 스타일을위한 다양한 도구에 대해 광범위한 연구를했습니다. 도구에는 두 가지 유형이 있습니다. 린터-코드를 분석하고 잘못 사용 된 코드 스타일에 대한 경고를 제공하고 수정 방법에 대한 조언을 표시하는 방법과 코드 포맷터-파일을 저장할 때 PEP 스타일을 사용하여 문서의 형식을 다시 지정합니다.
재 포맷은 더 정확해야하기 때문에-원하지 않는 무언가가 쓸모 없게되는 경우-PEP의 일부를 커버하지 않으면 린터가 훨씬 더 많이 표시됩니다.
예를 들어 모든 규칙에서 구성 할 수있는 Pylinter (모든 유형의 경고를 켜고 끌 수 있음), 검은 색 구성 할 수없는 구성 등 모두 구성에 대한 권한이 다릅니다.
다음은 몇 가지 유용한 링크와 튜토리얼입니다.
선적 서류 비치:
린터 (인기순) :
코드 포맷터 (인기순) :
많이있다.
IDE에는 일반적으로 몇 가지 형식 지정 기능이 내장되어 있습니다. IntelliJ Idea / PyCharm이 수행하고 Eclipse 용 Python 플러그인도 마찬가지입니다.
여러 언어를 대상으로 할 수있는 포맷터 / 린터가 있습니다. https://coala.io 가 그 좋은 예입니다.
그런 다음 다른 답변에서 많은 것을 언급하는 단일 목적 도구가 있습니다.
자동 재 형식화의 한 가지 특정 방법은 파일을 AST 트리로 구문 분석 한 다음 (주석을 삭제하지 않고) 텍스트로 다시 덤프하는 것입니다 (원래 형식이 보존되지 않음을 의미 함). 그 예는 https://github.com/python/black 입니다.