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 / pandas에서 True == np.bool_(True)
하지만 그렇지 않습니다 True is np.bool_(True)
!)
각 유형 (이전 및 이후)의 위반 수를 확인할 수 있습니다.
pep8 --quiet --statistics .
참고 : E501 (줄이 너무 길어짐)은 코드에 많은 항목이있을 수 있고 때로는 autopep8에 의해 수정되지 않는 특수한 경우라고 생각합니다.
예를 들어, 이 기술을 pandas 코드베이스에 적용했습니다 .
@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 코드 형식 지정!
If you're using eclipse + PyDev you can simply activate autopep8 from PyDev's settings: Windows -> Preferences -> type 'autopep8' in the search filter.
Check the 'use autopep8.py for code formatting?' -> OK
Now eclipse's CTRL-SHIFT-F code formatting should format your code using autopep8 :)
There are many.
IDEs usually have some formatting capability built in. IntelliJ Idea / PyCharm does, same goes for the Python plugin for Eclipse, and so on.
There are formatters/linters that can target multiple languages. https://coala.io is a good example of those.
Then there are the single purpose tools, of which many are mentioned in other answers.
One specific method of automatic reformatting is to parse the file into AST tree (without dropping comments) and then dump it back to text (meaning nothing of the original formatting is preserved). Example of that would be https://github.com/python/black.
참고URL : https://stackoverflow.com/questions/14328406/tool-to-convert-python-code-to-be-pep8-compliant
'IT story' 카테고리의 다른 글
인라인 JSDoc을 사용하여 param이 선택 사항임을 나타내는 방법은 무엇입니까? (0) | 2020.08.14 |
---|---|
npm이 연결된 노드 모듈을 나열하는 쉬운 방법은 무엇입니까? (0) | 2020.08.14 |
확장이 빌드되지 않았기 때문에 GEM 무시 (0) | 2020.08.13 |
IPython Notebook을 올바르게 닫는 방법은 무엇입니까? (0) | 2020.08.13 |
외부에서 웹팩 코드 호출 (HTML 스크립트 태그) (0) | 2020.08.13 |