nomenclatura - python package name
Estándar de codificación de la orden de importación (4)
Actualización (2016): @sbywater tiene la respuesta más reciente.
¡Lo encontré! (accidentalmente, mientras leía "Hacker''s guide to python")
Las comprobaciones de estilo de hacking OpenStack del proyecto denominado hacking introducen varias extensiones flake8
únicas. Hay hacking_import_groups entre ellos ( commit relacionado).
Ejemplo:
requisitos
archivos utilizados en el ejemplo
tox.ini
(tenemos que decirle a flake8 que queremos usar un cheque personalizado)[hacking] local-check = hacking.core.hacking_import_groups
UPD: con la versión más reciente de
hacking
, se cambió la ruta del cheque, ahora 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 ejecuto flake8
contra 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)
Luego, si PEP8
las importaciones en el orden correcto siguiendo a 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:
$ flake8 test.py
$
Espero que esto ayude a alguien en el futuro.
PEP8 sugiere que:
Las importaciones deben agruparse en el siguiente orden:
- importación de biblioteca estándar
- importaciones de terceros relacionadas
- aplicación local / importación específica de biblioteca
Debería poner una línea en blanco entre cada grupo de importaciones.
¿Hay alguna forma de comprobar si el estándar se infringe en cualquier parte del paquete utilizando herramientas de análisis de código estático, como pylint
, pyflakes
, pychecker
, pep8
?
Ejemplo de violació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
Eche un vistazo a https://pypi.python.org/pypi/isort o https://github.com/timothycrosley/isort
isort analiza archivos especificados para líneas de importación de nivel global (importaciones fuera de try / exceptts bloques, funciones, etc.) y los coloca todos en la parte superior del archivo agrupados por tipo de importación:
- Futuro
- Biblioteca estándar de Python
- Tercero
- Proyecto actual de Python
- Explicitly Local (. Antes de la importación, como en: from. Import x)
Secciones separadas personalizadas (definidas por la lista forced_separate en el archivo de configuración) Dentro de cada sección, las importaciones se ordenan alfabéticamente. isort elimina automáticamente las importaciones duplicadas de python y se envuelve desde las importaciones a la longitud de línea especificada (por defecto es 80).
https://pypi.python.org/pypi/flake8-isort conecta esta funcionalidad en flake8
Existe flake8
complemento flake8
: flake8-import-order .
Este paquete agrega 3 nuevas advertencias de flake8
I100: sus declaraciones de importación están en el orden incorrecto.
I101: los nombres en su importación desde están en el orden incorrecto.
I201: falta una nueva línea entre secciones o importaciones.
La versión actual de pylint ahora hace esto e informa como clase de error C0411.