수입 주문 코딩 표준


84

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

1
pep8도구는 현재이를 확인하지 않습니다. 한 줄 (E401)에서 여러 가져 오기만 확인합니다
DNA

@DNA 잘 알고, 감사합니다. 거기에 뭔가가 있기를 바랍니다.
alecxe

PyCharm 이이 작업을 수행 할 수 있지만 100 % 확실하지는 않습니다. 그래도 돈이 든다.
Claudiu

5
@Claudiu-Pycharm에는 커뮤니티 버전도 있습니다.
Amit Verma 2014 년

3
무언가를 찾지 못했다면 자신의 pylint 플러그인을 작성하여이를 확인할 수 있습니다. 여기 에서 pylint-plugin-utils 및 예제 플러그인을 살펴보십시오 . (이것은 더 나은 주석으로 적합 할 수도 있지만 내가 코멘트로 명성이 없습니다.)
mobeets

답변:


70

현재 버전의 pylint는이 작업을 수행하고 오류 클래스 C0411로보고합니다.


9
지금은 더 높은 투표를 받아야합니다. 더 이상 오류 번호를 표시하지 않는 최신 버전의 경우 error class wrong-import-order입니다.
Soren Bjornstad

54

업데이트 (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
$

이것이 미래에 누군가를 도울 수 있기를 바랍니다.


1
당신은 자신에게 현상금을 수여해야합니다 :-). 니스 발견 BTW, 나는이 자신을 사용하여 시작할 수 있습니다

2
그들은 오류가 발생하기 쉽고 어려웠다는 이유로이 수표를 꺼 냈습니다 : github.com/openstack-dev/hacking/commit/…
jobevers

@jobevers 업데이트 주셔서 감사합니다! 글쎄, 나는 그것을 아무 문제없이 사용했습니다 :)
alecxe

26

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에 연결합니다.


2
실행하면 isort script_name.py --check-only정렬되지 않은 가져 오기만 확인하고 결과를 인쇄합니다. 이것이 제가 필요한 것입니다. 옵션에 대해 대단히 감사합니다.
alecxe 2014

isort -rc --check --diff표시 만 확인, 재귀 적으로 사랑하는 모든 파일을 검사
ptim

7

flake8플러그인이 존재합니다 flake8-가져 오기 위해 .

이 패키지는 3 개의 새로운 flake8 경고를 추가합니다.

I100 : 수입 명세서의 순서가 잘못되었습니다.

I101 : 가져 오기에서 가져온 이름의 순서가 잘못되었습니다.

I201 : 섹션 또는 가져 오기 사이에 줄 바꿈이 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.