PEP8 sugiere que:
Las importaciones deben agruparse en el siguiente orden:
- importaciones de bibliotecas estándar
- importaciones de terceros relacionadas
- Importaciones específicas de aplicaciones / bibliotecas locales
Debe poner una línea en blanco entre cada grupo de importaciones.
¿Hay una manera de comprobar si la norma se viola en cualquier parte del paquete utilizando herramientas de análisis de código estático, como pylint
, pyflakes
, pychecker
, pep8
?
Ejemplo de infracción:
from my_package import my_module
from django.db import models
import os
Forma correcta de importar:
import os
from django.db import models
from my_package import my_module
python
python-import
static-analysis
pep8
Alecxe
fuente
fuente
pep8
herramienta no verifica esto actualmente, solo verifica múltiples importaciones en una línea (E401)Respuestas:
La versión actual de pylint ahora hace esto y lo informa como clase de error C0411.
fuente
wrong-import-order
.Actualización (2016): sbywater tiene la respuesta más reciente.
¡Lo encontré! (accidentalmente, mientras leía "Guía de piratas informáticos sobre python")
El proyecto OpenStack Hacking Style Checks llamado hacking presenta varias
flake8
extensiones únicas . Entre ellos hay hacking_import_groups ( compromiso relacionado ).Ejemplo:
requisitos
piratería (de la rama maestra):
archivos usados en el ejemplo
tox.ini
(necesitamos decirle a flake8 que queremos usar un cheque personalizado)UPD: con la versión más reciente de
hacking
la ruta al cheque cambiada, ahora lo eshacking.checks.imports.hacking_import_groups
.test.py
(objetivo del cheque)import requests import sys from my_module import print_smth print_smth(requests.get('https://google.com')) print_smth(sys.version)
my_module.py
(importación local utilizada portest.py
)def print_smth(smth): print smth
Entonces, si me enfrento
flake8
atest.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)
Entonces, si agrupo las importaciones en el orden correcto siguiente
PEP8
:import sys import requests from my_module import print_smth print_smth(requests.get('https://google.com')) print_smth(sys.version)
No se encontraron advertencias:
Espero que esto ayude a alguien en el futuro.
fuente
Eche un vistazo a https://pypi.python.org/pypi/isort o https://github.com/timothycrosley/isort
https://pypi.python.org/pypi/flake8-isort conecta esta funcionalidad en flake8
fuente
isort script_name.py --check-only
, solo verificaría las importaciones sin clasificar e imprimirá los resultados, esto es lo que necesitaba. Muchas gracias por la opcionisort -rc --check --diff
comprobar todos los archivos de forma recursiva, sólo comprobar, mostrar una diferenciaExiste un
flake8
complemento: flake8-import-order .fuente