PEP8 suggère que:
Les importations doivent être regroupées dans l'ordre suivant:
- importations de bibliothèque standard
- importations en provenance de tiers
- importations locales spécifiques à une application/bibliothèque
Vous devez mettre une ligne vide entre chaque groupe d'importations.
Existe-t-il un moyen de vérifier si la norme est violée n'importe où dans le package à l'aide d'outils d'analyse de code statique, tels que pylint
, pyflakes
, pychecker
, pep8
?
Exemple de violation:
from my_package import my_module
from Django.db import models
import os
Manière correcte d'importer:
import os
from Django.db import models
from my_package import my_module
C'est ce que fait actuellement la version actuelle de pylint, qui est alors considérée comme une classe d'erreur C0411.
Mise à jour (2016): sbywater a la réponse la plus récente.
Je l'ai trouvé! (accidentellement, en lisant "Le guide de Hacker sur Python")
Contrôles de style de piratage OpenStack projet nommé piratage introduit plusieurs uniques flake8
extensions. Il y a hacking_import_groups parmi eux (liés commit ).
Exemple:
exigences
fichiers utilisés dans l'exemple
tox.ini
(nous devons dire à flake8 que nous voulons utiliser une vérification personnalisée)
[hacking]
local-check = hacking.core.hacking_import_groups
UPD: avec la dernière version de hacking
le chemin de la vérification a changé, maintenant il s’agit de hacking.checks.imports.hacking_import_groups
.
test.py
(cible du chèque)
import requests
import sys
from my_module import print_smth
print_smth(requests.get('https://google.com'))
print_smth(sys.version)
my_module.py
_ (import local utilisé par test.py
)
def print_smth(smth):
print smth
Ensuite, si je cours flake8
contre 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)
Ensuite, si je groupe les importations dans le bon ordre après PEP8
:
import sys
import requests
from my_module import print_smth
print_smth(requests.get('https://google.com'))
print_smth(sys.version)
Aucun avertissement trouvé:
$ flake8 test.py
$
J'espère que cela aidera quelqu'un à l'avenir.
Regardez https://pypi.python.org/pypi/isort ou https://github.com/timothycrosley/isort
isort analyse les fichiers spécifiés pour les lignes d'importation de niveau global (importations en dehors de try/excepte des blocs, des fonctions, etc.) et les place tous en haut du fichier, regroupés par type d'importation:
- Futur
- Bibliothèque standard Python
- Tierce personne
- Projet actuel Python
- Explicitement local (. Avant import, comme dans: from. Import x)
Sections séparées personnalisées (définies par la liste forcée_separate dans le fichier de configuration) À l'intérieur de chaque section, les importations sont triées par ordre alphabétique. isort supprime automatiquement les doublons python est importé et reste long depuis les importations jusqu'à la longueur de ligne spécifiée (la valeur par défaut est 80).
https://pypi.python.org/pypi/flake8-isort branche cette fonctionnalité dans flake8
UNE flake8
Le plugin existe: flake8-import-order .
Ce paquet ajoute 3 nouveaux avertissements flake8
I100: Vos déclarations d'importation sont dans le mauvais ordre.
I101: Les noms dans votre importation sont dans le mauvais ordre.
I201: saut de ligne manquant entre les sections ou les importations.