[python] 수입 주문 코딩 표준
PEP8 은 다음을 제안합니다.
가져 오기는 다음 순서로 그룹화되어야합니다.
- 표준 라이브러리 가져 오기
- 관련 제 3 자 수입
- 로컬 애플리케이션 / 라이브러리 특정 가져 오기
각 수입품 그룹 사이에 빈 줄을 넣어야합니다.
표준 정적 코드 분석 도구를 사용하여 패키지 어디서나 위반 여부를 확인하는 방법이 있습니까, 같은 pylint
, pyflakes
, pychecker
, pep8
?
위반 사례 :
from my_package import my_module
from django.db import models
import os
가져 오는 올바른 방법 :
import os
from django.db import models
from my_package import my_module
답변
현재 버전의 pylint는이 작업을 수행하고 오류 클래스 C0411로보고합니다.
답변
업데이트 (2016) : sbywater 가 가장 최근에 답변했습니다.
그것을 발견! (실수로 “해커의 파이썬 가이드”를 읽는 동안)
hacking 이라는 OpenStack Hacking Style Checks 프로젝트 에는 몇 가지 고유 한 flake8
확장 기능이 도입되었습니다 . 이 hacking_import_groups 그들 가운데 (관련이 커밋 ).
예:
-
요구 사항
-
예제에 사용 된 파일
-
tox.ini
(맞춤 검사를 사용하고 싶다고 flake8에 알려야합니다)[hacking] local-check = hacking.core.hacking_import_groups
UPD :
hacking
검사 경로 의 최신 버전이 변경되었으므로 이제hacking.checks.imports.hacking_import_groups
. -
test.py
(체크 대상)import requests import sys from my_module import print_smth print_smth(requests.get('https://google.com')) print_smth(sys.version)
-
my_module.py
(에서 사용하는 로컬 가져 오기test.py
)def print_smth(smth): print smth
-
그런 다음 flake8
반대하면 test.py
:
$ flake8 test.py
test.py:2:1: H305 imports not grouped correctly (requests: third-party, sys: stdlib)
test.py:3:1: H305 imports not grouped correctly (sys: stdlib, my_module.print_smth: project)
test.py:3:1: H306 imports not in alphabetical order (sys, my_module.print_smth)
그런 경우 I 그룹 올바른 순서의 다음의 수입 PEP8
:
import sys
import requests
from my_module import print_smth
print_smth(requests.get('https://google.com'))
print_smth(sys.version)
발견 된 경고 없음 :
$ flake8 test.py
$
이것이 미래에 누군가를 도울 수 있기를 바랍니다.
답변
https://pypi.python.org/pypi/isort 또는 https://github.com/timothycrosley/isort를 살펴보십시오.
isort는 전역 레벨 가져 오기 행 (try / excepts 블록, 함수 등을 제외하고 가져 오기)에 대해 지정된 파일을 구문 분석하고 가져 오기 유형별로 그룹화 된 파일의 맨 위에 모두 놓습니다.
- 미래
- Python 표준 라이브러리
- 제 3 자
- 현재 Python 프로젝트
- 명시 적으로 로컬 (. 가져 오기 전 : from. import x)
사용자 지정 별도 섹션 (구성 파일의 forced_separate 목록에 의해 정의 됨) 각 섹션 내에서 가져 오기가 알파벳순으로 정렬됩니다. isort는 중복 된 파이썬 가져 오기를 자동으로 제거하고 가져 오기에서 지정된 줄 길이 (기본값 : 80)까지 긴 줄을 래핑합니다.
https://pypi.python.org/pypi/flake8-isort는 이 기능을 flake8에 연결합니다.
답변
flake8
플러그인이 존재합니다 flake8-가져 오기 위해 .
이 패키지는 3 개의 새로운 flake8 경고를 추가합니다.
I100 : 수입 명세서의 순서가 잘못되었습니다.
I101 : 가져 오기에서 가져온 이름의 순서가 잘못되었습니다.
I201 : 섹션 또는 가져 오기 사이에 줄 바꿈이 없습니다.