wake-up-neo.com

Wie sortiere ich die Python-Anweisungen "import x" und "from x import y"?

Der Python Style Guide schlägt vor, Importe wie folgt zu gruppieren:

Importe sollten in der folgenden Reihenfolge gruppiert werden:

  1. standardbibliothekimporte
  2. verbundene Einfuhren Dritter
  3. importe lokaler Anwendungen/Bibliotheken

Es wird jedoch nichts erwähnt, wie die zwei verschiedenen Arten der Einfuhr gestaltet werden sollten:

from foo import bar
import foo

Es gibt mehrere Möglichkeiten, sie zu sortieren (nehmen wir an, alle diese Importe gehören zu derselben Gruppe):

  • zuerst from..import, dann import

    from g import gg
    from x import xx
    import abc
    import def
    import x
    
  • zuerst import, dann from..import

    import abc
    import def
    import x
    from g import gg
    from x import xx
    
  • alphabetische Reihenfolge nach Modulnamen, wobei die Art des Imports ignoriert wird

    import abc
    import def
    from g import gg
    import x
    from xx import xx
    

PEP8 erwähnt nicht die bevorzugte Reihenfolge dafür und die "Cleanup-Importe" -Features, die einige IDEs wahrscheinlich nur tun, was der Entwickler dieses Features bevorzugt.

Ich suche nach einem anderen PEP, das diesen oder einen relevanten Kommentar/E-Mail von BDFL (oder einem anderen Python-Kernentwickler) erläutert. Bitte keine subjektiven Antworten angeben, die Ihre Präferenz angeben.

114
ThiefMaster

Importe werden im Allgemeinen alphabetisch sortiert und an verschiedenen Stellen neben PEP 8 beschrieben.

Alphabetisch sortierte Module sind schneller lesbar und durchsuchbar. Immerhin dreht sich bei Python alles um die Lesbarkeit ... Es ist auch einfacher zu prüfen, ob etwas importiert wird, und vermeidet doppelte Importe

In PEP 8 steht nichts zum Sortieren zur Verfügung. Es ist also alles über die Wahl, was Sie verwenden.

Nach wenigen Referenzen von seriösen Sites und Repositories auch Beliebtheit, ist alphabetisch die Reihenfolge.

für zB so:

import httplib
import logging
import random
import StringIO
import time
import unittest
from nova.api import openstack
from nova.auth import users
from nova.endpoint import cloud

OR

import a_standard
import b_standard

import a_third_party
import b_third_party

from a_soc import f
from a_soc import g
from b_soc import d

Das offizielle Repository von Reddit besagt auch, dass im Allgemeinen die PEP-8-Importreihenfolge verwendet werden sollte. Es gibt jedoch einige Ergänzungen

for each imported group the order of imports should be:
import <package>.<module> style lines in alphabetical order
from <package>.<module> import <symbol> style in alphabetical order

Verweise:

PS: Das Dienstprogramm isort sortiert Ihre Importe automatisch.

74
Abhishek

Gemäß den CIA-internen Codierungskonventionen (Teil des WikiLeaks Vault 7-Lecks ) sollten Python-Importe in drei Gruppen unterteilt werden:

  1. Standardbibliothekimporte
  2. Importe von Drittanbietern
  3. Anwendungsspezifische Importe

Importe sollten lexikographisch innerhalb dieser Gruppen angeordnet werden, wobei der Fall ignoriert wird:

import foo
from foo import bar
from foo.bar import baz
from foo.bar import Quux
from Foob import ar
14
gar

Die PEP 8 sagt dazu nichts. Es gibt keine Konvention für diesen Punkt, und das bedeutet nicht, dass die Python-Community eine absolut definieren muss. Eine Wahl kann für ein Projekt besser sein, für ein anderes jedoch die schlechteste. Dies ist eine Frage der Präferenzen, da jede Lösung Vor- und Nachteile hat. Wenn Sie Konventionen befolgen möchten, müssen Sie die von Ihnen zitierte Reihenfolge einhalten:

  1. standardbibliothekimporte
  2. verbundene Einfuhren Dritter
  3. importe lokaler Anwendungen/Bibliotheken

Zum Beispiel: Google empfiehlt auf dieser Seite, dass import in jeder Kategorie lexikographisch sortiert werden sollte (Standard/Dritte/Ihre). Aber bei Facebook, Yahoo und was auch immer, es ist vielleicht eine andere Konvention ...

7
Maxime Lorant

Alle import x-Anweisungen sollten nach dem Wert von x und alle from x import y-Anweisungen in alphabetischer Reihenfolge nach dem Wert von x sortiert werden. Die sortierten Gruppen von from x import y-Anweisungen müssen der sortierten Gruppe von import x-Anweisungen folgen.

import abc
import def
import x
from g import gg
from x import xx
from z import a
0