[python] 수입 주문 코딩 표준

PEP8 은 다음을 제안합니다.

가져 오기는 다음 순서로 그룹화되어야합니다.

  1. 표준 라이브러리 가져 오기
  2. 관련 제 3 자 수입
  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 그들 가운데 (관련이 커밋 ).

예:

  • 요구 사항

    • 독극물
    • 플레이크 8
    • 해킹 (마스터 브랜치에서) :

      $ git clone https://github.com/openstack-dev/hacking.git
      $ cd hacking/
      $ python setup.py install
      
  • 예제에 사용 된 파일

    • 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 : 섹션 또는 가져 오기 사이에 줄 바꿈이 없습니다.


답변