web-dev-qa-db-fra.com

Python Importer la commande

Je travaille sur un grand projet en python qui a beaucoup d'importations.

  1. Certaines importations sont des importations de système - elles sont faciles, généralement juste absolument importées.
  2. Certaines importations sont tierces. Ceux-ci peuvent avoir des noms absolus longs et maladroits, mais des fonctions uniques clairement nommées (nécessitant from ... import déclarations). Enfin, certains ont des alias canoniques (import numpy as np).
  3. Certaines importations proviennent de mon propre package, qui a 2 niveaux de hiérarchie: 1 niveau supérieur contenant des sous-répertoires avec du code.

Compte tenu de tout cela, le schéma d'importation le plus lisible que j'ai pu trouver est le suivant:

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

En d'autres termes, quel que soit le type d'importation (absolue ou aliasing ou importation sélective), j'importe d'abord par ordre alphabétique le système, puis un tiers, et enfin les bibliothèques de packages.

Existe-t-il une approche acceptée par l'industrie à cet égard? Quelque chose qui ressemble à l'ordre d'importation d'en-tête Google C++.

8
VF1

si vous recherchez une norme plus détaillée que pep8, voir https://github.com/PyCQA/flake8-import-order

de leur README

Les styles suivants sont directement pris en charge,

  • cryptography - voir un exemple
  • google - style décrit dans Google Style Guidelines , voir un exemple
  • smarkets - style comme google uniquement avec les instructions import avant from X import ... instructions, voir un exemple
  • appnexus - style comme google uniquement avec les instructions import pour les packages locaux de votre entreprise ou organisation venant après les instructions import pour les packages tiers, voir un - exemple
  • edited - voir un exemple
  • pycharm - style comme smarkets uniquement avec un tri des noms importés respectant la casse
  • pep8 - style qui applique uniquement les groupes sans appliquer l'ordre au sein des groupes

Vous pouvez également ajouter votre propre style

9
David Chan

Je ne suis pas un expert en python, donc il me manque peut-être quelque chose, mais la seule norme d'ordre d'importation que je connaisse est PEP8 :

Les importations doivent être regroupées dans l'ordre suivant:

  1. importations de bibliothèques standard
  2. importations de tiers liées
  3. importations spécifiques à une application/bibliothèque locale

Vous devez mettre une ligne vierge entre chaque groupe d'importations.

Certains outils tels que pylint vous avertiront si votre code rompt cette suggestion.

Il semble que c'est à peu près ce que vous faites déjà. La norme ne le dit pas, mais le tri alphabétique au sein de chaque groupe est également logique pour moi.

5
Andres F.