PEP8 sugeruje, że:
Import należy pogrupować w następującej kolejności:
- standardowe importy bibliotek
- powiązany import stron trzecich
- import lokalnych aplikacji / bibliotek
Powinieneś umieścić pustą linię między każdą grupą importów.
Czy istnieje sposób, aby sprawdzić, czy norma jest naruszone w dowolnym miejscu na opakowaniu przy użyciu narzędzi analizy statycznej kodu, jak pylint
, pyflakes
, pychecker
, pep8
?
Przykład naruszenia:
from my_package import my_module
from django.db import models
import os
Prawidłowy sposób importu:
import os
from django.db import models
from my_package import my_module
python
python-import
static-analysis
pep8
alecxe
źródło
źródło
pep8
Narzędzie aktualnie nie to sprawdzić - to tylko kontrole dla wielu importu na jednej linii (E401)Odpowiedzi:
Obecna wersja pylint teraz to robi i zgłasza to jako błąd klasy C0411.
źródło
wrong-import-order
.Aktualizacja (2016): sbywater ma najnowszą odpowiedź.
Znalazłem to! (przypadkowo podczas czytania „Hacker's guide to Python”)
Projekt OpenStack Hacking Style Checks o nazwie hacking wprowadza kilka unikalnych
flake8
rozszerzeń. Są wśród nich hacking_import_groups (powiązane zatwierdzenie ).Przykład:
wymagania
hakowanie (z głównej gałęzi):
pliki użyte w przykładzie
tox.ini
(musimy powiedzieć flake8, że chcemy użyć niestandardowego czeku)UPD: przy
hacking
zmianie najnowszej wersji ścieżki do czeku, teraz jesthacking.checks.imports.hacking_import_groups
.test.py
(cel czeku)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 lokalny używany przeztest.py
)def print_smth(smth): print smth
Następnie, jeśli biegnę
flake8
przedtest.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)
Następnie, jeśli pogrupuję importy we właściwej kolejności
PEP8
:import sys import requests from my_module import print_smth print_smth(requests.get('https://google.com')) print_smth(sys.version)
Nie znaleziono ostrzeżeń:
Mam nadzieję, że to pomoże komuś w przyszłości.
źródło
Zajrzyj na https://pypi.python.org/pypi/isort lub https://github.com/timothycrosley/isort
https://pypi.python.org/pypi/flake8-isort podłącza tę funkcjonalność do flake8
źródło
isort script_name.py --check-only
- sprawdziłby tylko nieposortowane importy i wydrukował wyniki - tego potrzebowałem. Bardzo dziękuję za możliwość skorzystania z opcji.isort -rc --check --diff
sprawdzaj wszystkie pliki rekurencyjnie, tylko sprawdzając, wyświetlIstnieje
flake8
wtyczka: flake8-import-order .źródło