autopep8은 PEP 8 스타일 가이드를 따르도록 Python 코드의 형식을 자동으로 지정합니다. pycodestyle 유틸리티를 사용하여 형식을 지정해야 하는 코드 부분을 결정합니다. autopep8은 pycodestyle에서 보고할 수 있는 대부분의 형식 문제를 수정할 수 있습니다.
내용물
설치
요구사항
용법
특징
더욱 발전된 사용법
한 줄씩 비활성화
모듈로 사용
구성
pyproject.toml
사전 커밋과 함께 사용
테스트
문제 해결
pkg_resources.DistributionNotFound
모래밭
핍에서:
$ pip install --upgrade autopep8
--user
옵션 사용을 고려해보세요.
autopep8에는 pycodestyle이 필요합니다.
현재 위치에서 파일을 수정하려면(적극적 수준 2 사용):
$ autopep8 --in-place --aggressive --aggressive <파일 이름>
autopep8을 실행하기 전에.
import math, sys;def example1():####긴 주석입니다. 이는 72자 내에 맞게 래핑되어야 합니다.some_tuple=( 1,2, 3,'a' );some_variable={'long':'긴 코드 줄은 79자 내에 래핑되어야 합니다.','other':[math .pi, 100,200,300,9876543210,'이것은 계속되는 긴 문자열입니다.'],'more':{'inner':'이 전체 논리 라인은 래핑되어야 합니다.',some_tuple:[1,20,300,40000,500000000,60000000000000000]}}return (some_tuple, some_variable)def example2(): return {'has_key() is deprecated':True}.has_key({'f':2}.has_key(''));class 예시3( object ):def __init__ ( self, bar ): #Comments에는 해시 뒤에 공백이 있어야 합니다. if bar : bar+=1; 바=바* 바 ; return bar else:some_string = """ 여러 줄 문자열의 들여쓰기는 건드리면 안 됩니다. 실제 코드만 다시 들여쓰기해야 합니다."""return (sys.path, some_string)
autopep8을 실행한 후.
import mathimport sysdef example1():# 이것은 긴 주석입니다. 이는 72#자 내에 맞게 래핑되어야 합니다.some_tuple = (1, 2, 3, 'a')some_variable = {'long': '긴 코드 줄은 79자 내에 래핑되어야 합니다.','other': [math .pi,100,200,300,9876543210,'이것은 계속되는 긴 문자열입니다.'],'more': {'inner': '이 전체 논리 행 포장해야 합니다.',some_tuple: [1,20,300,40000,500000000,60000000000000000]}}return (some_tuple, some_variable)def example2(): return ('' in {'f': 2}) in {'has_key( )은 더 이상 사용되지 않습니다.': True}class 예제3(객체):def __init__(self, bar):# 주석은 hash 뒤에 공백이 있어야 합니다.if bar:bar += 1bar = bar * barreturn barelse:some_string = """ 여러 줄 문자열의 들여쓰기는 건드리면 안 됩니다. 실제 코드만 다시 들여쓰기해야 합니다. ."""반환(sys.path, some_string)
옵션:
사용법: autopep8 [-h] [--version] [-v] [-d] [-i] [--global-config 파일 이름] [--ignore-local-config] [-r] [-j n] [-p n] [-a] [--실험적] [--glob 제외] [--list-fixes] [--오류 무시] [--오류 선택] [--max-line-length n] [--line-range 라인 라인] [--hang-closing] [--exit-code] [파일 [파일 ...]] PEP 8 스타일 가이드를 준수하도록 Python 코드의 형식을 자동으로 지정합니다. 위치 인수: files 파일을 형식화하거나 '-'를 표준으로 사용합니다. 선택적 인수: -h, --help 이 도움말 메시지를 표시하고 종료합니다. --version 프로그램의 버전 번호를 표시하고 종료합니다. -v, --verbose 자세한 메시지를 인쇄합니다. 여러 개의 -v 결과가 더 많아집니다. 자세한 메시지 -d, --diff 고정 소스에 대한 diff를 인쇄합니다. -i, --in-place 파일을 현재 위치에서 변경합니다. --global-config 파일 이름 전역 pep8 구성 파일의 경로; 이 파일이 그렇다면 존재하지 않으면 무시됩니다(기본값: ~/.config/pep8) --ignore-local-config 로컬 구성 파일을 찾아서 적용하지 마십시오. 그렇지 않다면 통과되면 기본값은 다음의 구성 파일로 업데이트됩니다. 프로젝트의 루트 디렉터리 -r, --recursive 디렉토리에 대해 재귀적으로 실행됩니다. 와 함께 사용해야 합니다 --in-place 또는 --diff -j n, --jobs n 병렬 작업 수; 값이 다음과 같은 경우 CPU 수와 일치합니다. 1 미만 -p n, --pep8-pass n 최대 추가 pep8 패스 수(기본값: 무한) -a, --aggressive 공백이 아닌 변경을 활성화합니다. 다중 - 결과 더욱 공격적인 변화 --experimental 실험적 수정을 활성화합니다. --exclude glob은 이러한 쉼표와 일치하는 파일/디렉터리 이름을 제외합니다.- 분리된 글로브 --list-fixes 수정 사항 목록 코드; --ignore 및 --select에서 사용됨 --ignore 오류는 이러한 오류/경고를 수정하지 않습니다(기본값: E226,E24,W50,W690) --선택 오류는 이러한 오류/경고만 수정합니다(예: E4,W). --max-line-length n 최대 허용 줄 길이 설정(기본값: 79) --line-range 라인 라인, --range 라인 라인 이 포함 범위 내에서 발견된 오류만 수정하세요. 줄 번호(예: 1 99); 줄 번호는 다음 위치에서 색인이 생성됩니다. 1 --hang-closing hang-closing 옵션이 pycodestyle에 전달되었습니다. --exit-code 종료 코드 동작을 변경합니다. 기본 동작 반환 값, 0은 차이 없음, 1은 오류 종료입니다. 이 옵션을 추가하면 2를 반환합니다. 2개 존재 차이점.
autopep8은 pycodestyle에서 보고된 다음 문제를 수정합니다.
E101 - 모든 줄을 다시 들여씁니다. E11 - 들여쓰기 수정. E121 - 들여쓰기를 4의 배수로 수정합니다. E122 - 내어쓰기를 위한 부재 들여쓰기를 추가합니다. E123 - 닫는 브래킷을 여는 브래킷과 일치하도록 정렬합니다. E124 - 시각적 들여쓰기와 일치하도록 닫는 괄호를 정렬합니다. E125 - 다음 논리 줄과 줄을 구별하기 위해 들여쓰기합니다. E126 - 과도하게 들여쓰기된 들여쓰기를 수정합니다. E127 - 시각적 들여쓰기를 수정합니다. E128 - 시각적 들여쓰기를 수정합니다. E129 - 시각적 들여쓰기를 수정합니다. E131 - 정렬되지 않은 연속 줄의 내어쓰기를 수정합니다. E133 - 닫는 괄호의 누락된 들여쓰기를 수정합니다. E20 - 불필요한 공백을 제거합니다. E211 - 불필요한 공백을 제거합니다. E22 - 키워드 주변의 불필요한 공백을 수정합니다. E224 - 연산자 주위에 불필요한 공백을 제거합니다. E225 - 연산자 주위에 누락된 공백을 수정합니다. E226 - 산술 연산자 주위에 누락된 공백을 수정합니다. E227 - 비트별/시프트 연산자 주위에 누락된 공백을 수정합니다. E228 - 모듈로 연산자 주위에 누락된 공백을 수정합니다. E231 - 누락된 공백을 추가합니다. E241 - 키워드 주변의 불필요한 공백을 수정합니다. E242 - 연산자 주위에 불필요한 공백을 제거합니다. E251 - 매개변수 '=' 기호 주위의 공백을 제거합니다. E252 - 매개변수 주위에 공백이 누락되었습니다. E26 - 인라인 댓글의 댓글 해시 뒤 간격을 수정합니다. E265 - 블록 주석의 주석 해시 뒤 간격을 수정합니다. E266 - 블록 주석에 대해 너무 많은 선행 '#'을 수정합니다. E27 - 키워드 주변의 불필요한 공백을 수정합니다. E301 - 누락된 빈 줄을 추가합니다. E302 - 누락된 빈 줄 2개를 추가합니다. E303 - 여분의 빈 줄을 제거합니다. E304 - 함수 데코레이터 다음의 빈 줄을 제거합니다. E305 - 기능 또는 클래스 종료 후 2개의 빈 줄이 예상됩니다. E306 - 중첩된 정의 앞에 1개의 빈 줄이 필요합니다. E401 - 수입품을 별도의 줄에 넣습니다. E402 - 파일 상단에 없는 모듈 수준 가져오기 수정 E501 - --max-line-length 문자 내에 줄을 맞추십시오. E502 - 개행 문자의 외부 이스케이프를 제거합니다. E701 - 콜론으로 구분된 복합 명령문을 별도의 줄에 입력합니다. E70 - 세미콜론으로 구분된 복합문을 별도의 줄에 입력합니다. E711 - 없음과의 비교를 수정합니다. E712 - 부울과의 비교를 수정합니다. E713 - 회원 자격 테스트에는 'not in'을 사용하세요. E714 - 객체 식별을 위해 'is not' 테스트를 사용합니다. E721 - 유형을 직접 비교하는 대신 "isinstance()"를 사용하십시오. E722 - 제외하고 수정합니다. E731 - 람다 표현식을 할당하지 않는 경우 def를 사용하세요. W291 - 후행 공백을 제거합니다. W292 - 파일 끝에 단일 줄 바꿈을 추가합니다. W293 - 빈 줄의 후행 공백을 제거합니다. W391 - 후행 공백 줄을 제거합니다. W503 - 이진 연산자 앞의 줄 바꿈을 수정합니다. W504 - 이진 연산자 뒤의 줄 바꿈을 수정합니다. W605 - 잘못된 이스케이프 시퀀스 'x'를 수정합니다.
autopep8은 또한 pycodestyle에서 발견되지 않은 일부 문제를 수정합니다.
줄 끝이 혼합된 파일을 표준화합니다.
클래스 독스트링과 첫 번째 메소드 선언 사이에 빈 줄을 넣으세요. ( E301
로 활성화됩니다.)
함수 선언과 해당 문서 문자열 사이의 빈 줄을 제거합니다. ( E303
으로 활성화됩니다.)
autopep8은 pycodestyle에서 발견된 일부 문제를 수정하지 않습니다.
비주석에 대한 E112
/ E113
구문 규칙을 위반하는 잘못된 들여쓰기에 대한 보고입니다. 이는 전혀 수정되어서는 안 됩니다.
주석 해시 뒤의 공백을 참조하는 E265
는 주석이 코드처럼 보이는 경우 무시됩니다. autopep8은 실제 주석이 아니기 때문에 이러한 주석을 수정하지 않습니다. pycodestyle 경고를 정말로 없애고 싶다면 주석 처리된 코드를 제거하는 것을 고려해 보세요. (Eradicate를 통해 자동화할 수 있습니다.)
기본적으로 autopep8은 공백만 변경합니다. 따라서 기본적으로 E711
및 E712
는 수정되지 않습니다. ( x == None
x is None
으로 변경하면 x
에 __eq__
메서드가 재정의된 경우 프로그램의 의미가 바뀔 수 있습니다.) 더 이상 사용되지 않는 코드 W6
도 수정되지 않습니다. 이러한 보다 적극적인 수정을 활성화하려면 --aggressive
옵션을 사용하십시오.
$ autopep8 --aggressive <파일 이름>
공격성 수준을 높이려면 여러 --aggressive
사용하십시오. 예를 들어 E712
공격성 수준 2가 필요합니다( x == True
는 x
또는 x is True
로 변경될 수 있지만 autopep8은 전자를 선택하므로).
--aggressive
또한 라인을 더욱 적극적으로 단축합니다. 또한 후행 공백을 보다 적극적으로 제거합니다. (보통 우리는 독스트링이나 다른 여러 줄 문자열의 후행 공백을 건드리지 않습니다. 그리고 독스트링을 더욱 적극적으로 변경하려면 docformatter를 사용하세요.)
수정 사항의 하위 집합만 활성화하려면 --select
옵션을 사용하세요. 예를 들어 다양한 유형의 들여쓰기 문제를 해결하려면 다음을 수행하세요.
$ autopep8 --select=E1,W1 <파일 이름>
수정 중인 파일이 큰 경우 자세한 진행 메시지를 활성화할 수 있습니다.
$ autopep8 -v <파일 이름>
--experimental
전달하면 다음 기능이 활성화됩니다.
길이를 고려하여 코드 줄을 줄입니다.
$ autopep8 --실험 <파일 이름>
autopep8: off
사용한 다음 autopep8: on
사용하여 다시 활성화하면 파일에서 다시 켤 때까지 autopep8을 비활성화할 수 있습니다.
# autopep8: 끄기[ [23, 23, 13, 43], [32, 34, 34, 34], [56, 34, 34, 11], [10, 10, 10, 10], ]# autopep8: 켜기
fmt: off
및 fmt: on
도 유효합니다.
autopep8을 모듈로 사용하는 가장 간단한 방법은 fix_code()
함수를 사용하는 것입니다:
>>> autopep8 가져오기 >>> autopep8.fix_code('x= 123n') 'x = 123n'
또는 옵션을 사용하여:
>>> autopep8 가져오기 >>> autopep8.fix_code('print( 123 )n', ... 옵션={'무시': ['E']}) '인쇄(123)n'
기본적으로 $HOME/.config/pycodestyle
(Windows 환경에서는 ~.pycodestyle
)이 존재하면 전역 구성 파일로 사용됩니다. 또는 --global-config
옵션을 사용하여 전역 구성 파일을 지정할 수 있습니다.
또한 대상 파일이 있는 디렉터리에 setup.cfg
, tox.ini
, .pep8
및 .flake8
파일이 있는 경우 구성 파일로 사용됩니다.
pep8
, pycodestyle
및 flake8
섹션으로 사용할 수 있습니다.
구성 파일 예:
[파이코드 스타일] max_line_length = 120 무시 = E501
autopep8은 pyproject.toml
도 사용할 수 있습니다. 섹션은 [tool.autopep8]
이어야 하며 pyproject.toml
다른 구성 파일보다 우선합니다.
구성 파일 예:
[tool.autopep8] max_line_length = 120 무시 = "E501,W6" # 또는 ["E501", "W6"] 제자리 = 사실 재귀 = 사실 공격적 = 3
autopep8은 사전 커밋을 위한 후크로 사용될 수 있습니다.
autopep8을 플러그인으로 추가하려면 다음 저장소 정의를 구성에 추가하세요.
저장소: - repo: https://github.com/hhatto/autopep8rev: ... # 원하는 태그나 개정을 선택하거나 `pre-commit autoupdate`hooks를 실행합니다. - ID: autopep8
테스트 케이스는 test/test_autopep8.py
에 있습니다. python test/test_autopep8.py
또는 tox를 통해 직접 실행할 수 있습니다. 후자는 여러 Python 인터프리터에 대해 테스트하는 데 유용합니다. (현재 CPython 버전 3.8, 3.9, 3.10, 3.11 및 3.12에 대해 테스트하고 있습니다. 또한 PyPy에 대해서도 테스트합니다.)
test/acid.py
를 통해 광범위한 스펙트럼 테스트가 가능합니다. 이 스크립트는 Python 코드에 대해 autopep8을 실행하고 코드 수정 사항의 정확성과 완전성을 확인합니다. 바이트코드가 동일하게 유지되는지 확인할 수 있습니다. test/acid_pypi.py
는 acid.py
를 사용하여 PyPI의 최신 릴리스 패키지에 대해 테스트합니다.
pkg_resources.DistributionNotFound
이전 버전의 setuptools
사용하는 경우 autopep8
실행하려고 할 때 pkg_resources.DistributionNotFound
발생할 수 있습니다. 이 setuptools
문제를 해결하려면 setuptools
업그레이드해 보십시오.
$ pip install --업그레이드 설정 도구
시스템에 설치하는 경우 sudo
사용하십시오.
PyPI
GitHub
코덱스