web-dev-qa-db-fra.com

Quelle est la bonne façon de trier les instructions `import x` et` from x import y` de Python?

Le guide de style python suggère de regrouper les importations de la manière suivante:

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

  1. importations de bibliothèque standard
  2. importations en provenance de tiers
  3. importations locales spécifiques à une application/bibliothèque

Cependant, il ne mentionne rien sur la manière dont les deux types d'importation devraient être présentés:

from foo import bar
import foo

Il existe plusieurs façons de les trier (supposons que toutes les importations appartiennent au même groupe):

  • d'abord from..import, puis import

    from g import gg
    from x import xx
    import abc
    import def
    import x
    
  • d'abord import, puis from..import

    import abc
    import def
    import x
    from g import gg
    from x import xx
    
  • ordre alphabétique par nom de module, en ignorant le type d'importation

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

PEP8 ne mentionne pas l'ordre préféré pour cela et les fonctionnalités d '"importation de nettoyage" que certains IDE n'ont probablement fait que ce que le développeur de cette fonctionnalité a préféré.

Je recherche un autre PPE clarifiant ce point ou un commentaire/courrier électronique pertinent de BDFL (ou un autre développeur Python). S'il vous plaît, ne postez pas de réponses subjectives indiquant votre propre préférence.

114
ThiefMaster

Les importations sont généralement triées par ordre alphabétique et décrites à différents endroits à côté du PEP 8.

Les modules triés par ordre alphabétique sont plus faciles à lire et à rechercher. Après tout, Python est entièrement basé sur la lisibilité . En outre, il est plus facile de vérifier que quelque chose est importé et d’éviter les importations dupliquées.

Il n’existe aucun élément de tri dans PEP 8. C’est donc une question de choix de ce que vous utilisez.

Selon quelques références de sites réputés et de référentiels également populaires, l'ordre alphabétique est la solution.

pour par exemple comme ceci:

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

Le référentiel officiel Reddit indique également qu’en général, il convient d’utiliser la commande d’importation PEP-8. Cependant, il y a quelques ajouts qui sont

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

Références:

PS: l'utilitaire isort trie automatiquement vos importations.

74
Abhishek

Selon les conventions de codage internes de la CIA (faisant partie de la fuite WikiLeaks Vault ), les importations de python doivent être regroupées en trois groupes:

  1. Importation de bibliothèque standard
  2. Importations tierces
  3. Importations spécifiques à l'application

Les importations doivent être classées lexicographiquement au sein de ces groupes, sans tenir compte des cas suivants:

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

Le PPE 8 n'en dit rien. Il n'y a pas de convention pour ce point, et cela ne signifie pas que la communauté Python doit en définir une absolument. Un choix peut être meilleur pour un projet mais le pire pour un autre ... C'est une question de préférences pour cela, chaque solution ayant des avantages et des inconvénients. Mais si vous voulez suivre les conventions, vous devez respecter l'ordre principal que vous avez cité:

  1. importations de bibliothèque standard
  2. importations en provenance de tiers
  3. importations locales spécifiques à une application/bibliothèque

Par exemple, Google recommande dans cette page que import soit trié lexicographiquement, dans chaque catégorie (standard/tiers/votre). Mais sur Facebook, Yahoo et autres, c'est peut-être une autre convention ...

7
Maxime Lorant

Toutes les instructions import x doivent être triées selon la valeur de x et toutes les instructions from x import y doivent être triées de la valeur de x dans l'ordre alphabétique et les groupes d'instructions from x import y triés doivent suivre le groupe d'instructions import x trié.

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