आयात आदेश कोडिंग मानक


84

PEP8 सुझाव देता है कि:

निम्न क्रम में आयात किया जाना चाहिए:

  1. मानक पुस्तकालय आयात
  2. संबंधित तृतीय पक्ष आयात
  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 जानकर अच्छा लगा, धन्यवाद आशा है कि वहाँ कुछ है।
एलेक्सी

PyCharm यह कर सकता है, लेकिन मैं 100% निश्चित नहीं हूं। हालांकि इसमें पैसे खर्च होते हैं।
क्लॉडिउ

5
@ कोलियु - पाइक्रोम का एक सामुदायिक संस्करण भी है।
अमित वर्मा

3
यदि आप कुछ ढूंढना समाप्त नहीं करते हैं, तो आप इसे जांचने के लिए अपना खुद का पाइलिंट प्लगइन लिख सकते हैं। पर एक नजर डालें pylint-प्लगइन-utils और एक उदाहरण प्लगइन यहाँ । (यह एक टिप्पणी के रूप में बेहतर हो सकता है लेकिन मेरे पास टिप्पणी करने की प्रतिष्ठा नहीं है।)
मोबीट्स

जवाबों:


70

पाइलिंट का वर्तमान संस्करण अब ऐसा करता है, और इसे त्रुटि वर्ग C0411 के रूप में रिपोर्ट करता है।


9
यह अब एक उच्च मतदान जवाब होना चाहिए। अधिक हाल के संस्करणों के लिए जो अब त्रुटि संख्या प्रदर्शित नहीं करते हैं, यह त्रुटि वर्ग है wrong-import-order
सोरेन ब्योर्नस्टैड

54

अपडेट (2016): sbywater का सबसे हालिया जवाब है।


मिल गया! (गलती से, "हैकर गाइड टू पायथन" पढ़ते हुए)

ओपनस्टैक हैकिंग स्टाइल चेक्स नाम की परियोजना हैकिंग को कई अद्वितीय flake8एक्सटेंशन पेश करती है । नहीं है hacking_import_groups उन के बीच में (संबंधित प्रतिबद्ध )।

उदाहरण:

  • आवश्यकताओं

    • tox
    • flake8
    • हैकिंग (मास्टर शाखा से):

      $ git clone https://github.com/openstack-dev/hacking.git
      $ cd hacking/
      $ python setup.py install
      
  • उदाहरण में प्रयुक्त फाइलें

    • tox.ini (हमें fl8 को बताने की आवश्यकता है कि हम एक कस्टम चेक का उपयोग करना चाहते हैं)

      [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)

फिर, यदि मैं निम्नलिखित क्रम में आयात को समूहित करता हूं 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 ने वैश्विक स्तर की आयात लाइनों (आयातों के बाहर / ब्लॉक, फ़ंक्शंस, आदि को आयात करता है) के लिए निर्दिष्ट फ़ाइलों को पार्स किया और उन सभी को आयात के प्रकार द्वारा समूहीकृत फ़ाइल के शीर्ष पर रखता है:

  • भविष्य
  • पायथन स्टैंडर्ड लाइब्रेरी
  • तृतीय पक्ष
  • वर्तमान पायथन परियोजना
  • स्पष्ट रूप से स्थानीय (आयात करने से पहले, जैसे: आयात x से)

कस्टम सेपरेट सेक्शंस (कॉन्फ़िगरेशन फ़ाइल में मजबूर_सेपरेट सूची द्वारा परिभाषित) प्रत्येक अनुभाग के अंदर आयात को वर्णानुक्रम में क्रमबद्ध किया जाता है। आइसोर्ट स्वचालित रूप से डुप्लिकेट अजगर के आयात को हटा देता है, और आयात से निर्दिष्ट लाइन की लंबाई तक लंबा लपेटता है (चूक 80 तक)।

https://pypi.python.org/pypi/flake8-isort इस कार्यक्षमता को flake8 में प्लग करता है


2
बस ध्यान दें कि यदि आप चलाते हैं isort script_name.py --check-only- यह केवल अनसोल्ड आयात के लिए जाँच करेगा और परिणामों का प्रिंट आउट करेगा - यह वही है जो मुझे चाहिए था। विकल्प के लिए बहुत बहुत धन्यवाद।
एलेक्सी

isort -rc --check --diffसभी फ़ाइलों की पुनरावृत्ति की जाँच करें, केवल जाँच, एक अंतर प्रदर्शित करें
ptim

7

एक flake8प्लगइन मौजूद है: flake8-आयात आदेश

इस पैकेज में 3 नए फ्लैके 8 चेतावनियाँ शामिल हैं

I100: आपके आयात विवरण गलत क्रम में हैं।

I101: आयात से आपके नाम गलत क्रम में हैं।

I201: वर्गों या आयातों के बीच की नई सीमा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.