PEP8 предполагает, что:
Импорты следует сгруппировать в следующем порядке:
- стандартная библиотека импорта
- связанный сторонний импорт
- импорт для локального приложения / библиотеки
Вы должны поместить пустую строку между каждой группой импорта.
Есть ли способ , чтобы проверить , если стандарт нарушается нигде в пакете с помощью инструментов статического анализа кода, как pylint
, pyflakes
, pychecker
, pep8
?
Пример нарушения:
from my_package import my_module
from django.db import models
import os
Правильный способ импорта:
import os
from django.db import models
from my_package import my_module
pep8
Инструмент не в настоящее время проверить это - это только проверку на наличие нескольких импорта на одной линии (E401)Ответы:
Текущая версия pylint теперь делает это и сообщает об этом как о классе ошибки C0411.
источник
wrong-import-order
.Обновление (2016): у sbywater есть самый последний ответ.
Нашел! (случайно, пока читал "Хакерское руководство по питону")
Проект OpenStack Hacking Style Checks под названием hacking представляет несколько уникальных
flake8
расширений. Среди них есть hacking_import_groups (связанный коммит ).Пример:
требования
взлом (из ветки master):
файлы, используемые в примере
tox.ini
(нам нужно сообщить flake8, что мы хотим использовать пользовательскую проверку)UPD: с последней версией
hacking
изменился путь к проверке, теперь он естьhacking.checks.imports.hacking_import_groups
.test.py
(цель проверки)import requests import sys from my_module import print_smth print_smth(requests.get('https://google.com')) print_smth(sys.version)
my_module.py
(используется локальный импортtest.py
)def print_smth(smth): print smth
Тогда, если я столкнусь
flake8
с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)
Затем, если я сгруппирую импорт в правильном порядке
PEP8
:import sys import requests from my_module import print_smth print_smth(requests.get('https://google.com')) print_smth(sys.version)
Предупреждений не найдено:
Надеюсь, это поможет кому-то в будущем.
источник
Взгляните на https://pypi.python.org/pypi/isort или https://github.com/timothycrosley/isort
https://pypi.python.org/pypi/flake8-isort подключает эту функциональность к flake8
источник
isort script_name.py --check-only
- он будет проверять только несортированный импорт и распечатывать результаты - это то, что мне нужно. Большое спасибо за вариант.isort -rc --check --diff
проверять все файлы рекурсивно, только проверять, отображатьflake8
Плагин существует: flake8-импорт-заказ .источник