it-swarm.com.de

Python Importreihenfolge

Ich arbeite an einem großen Projekt in python, das viele Importe hat.

  1. Einige Importe sind Systemimporte - diese sind einfach, normalerweise nur absolut importiert.
  2. Einige Importe sind von Drittanbietern. Diese können lange, klobige absolute Namen haben, aber eindeutig einzelne Funktionen benennen (erfordert from ... import Aussagen). Schließlich haben einige kanonische Aliase (import numpy as np).
  3. Einige Importe stammen aus meinem eigenen Paket, das zwei Ebenen der Heierarchie aufweist: 1 oberste Ebene mit Unterverzeichnissen mit Code.

Angesichts all dessen ist das am besten lesbare Importschema, das ich mir vorstellen kann, das folgende:

import aaa_sys
import bbb_sys

import aaa_third
from bbb_third import bb
import ccc_third as cc
import ddd_third

import .aaa_local
import .bbb_local
import ..aaa_remote.aaa_remote_module
import ..bbb_remote.bbb_remote_module

Mit anderen Worten, unabhängig von der Art des Imports (absoluter oder Aliasing oder selektiver Import) importiere ich alphabetisch zuerst das System, dann Drittanbieter und schließlich Paketbibliotheken.

Gibt es dafür einen branchenüblichen Ansatz? Ähnlich wie bei der Importreihenfolge für Google C++ - Header.

8
VF1

wenn Sie nach einem detaillierteren Standard als pep8 suchen, lesen Sie https://github.com/PyCQA/flake8-import-order

von ihrer README

Die folgenden Stile werden direkt unterstützt:

  • cryptography - siehe Beispiel
  • google - Stil beschrieben in Google Style Guidelines , siehe Beispiel
  • smarkets - Stil als google nur mit import Anweisungen vor from X import ... Anweisungen, siehe Beispiel
  • appnexus - Stil als google nur mit import Anweisungen für Pakete, die für Ihr Unternehmen oder Ihre Organisation lokal sind und nach import Anweisungen für Pakete von Drittanbietern folgen, siehe - Beispiel
  • edited - siehe Beispiel
  • pycharm - Stil als smarkets nur mit Groß- und Kleinschreibung beim Importieren importierter Namen
  • pep8 - Stil, der nur Gruppen erzwingt, ohne die Reihenfolge innerhalb der Gruppen zu erzwingen

Sie können auch Ihren eigenen Stil hinzufügen

9
David Chan

Ich bin kein python Experte, daher fehlt mir möglicherweise etwas, aber der einzige mir bekannte Standard für Importaufträge ist PEP8 :

Importe sollten in der folgenden Reihenfolge gruppiert werden:

  1. standardbibliotheksimporte
  2. verwandte Importe von Dritten
  3. lokale anwendungs-/bibliotheksspezifische Importe

Sie sollten zwischen jeder Gruppe von Importen eine Leerzeile einfügen.

Einige Tools wie pylint warnen Sie, wenn Ihr Code diesen Vorschlag verletzt.

Es scheint, dass Sie so ziemlich das bereits tun. Der Standard sagt es nicht, aber eine alphabetische Sortierung innerhalb jeder Gruppe macht auch für mich Sinn.

5
Andres F.