library - requests python
¿Cuál es la forma correcta de ordenar Python `import x` y` from x import y` declaraciones? (3)
De acuerdo con las convenciones internas de codificación de la CIA (parte de la fuga de WikiLeaks Vault 7 ), las importaciones de Python deben agruparse en tres grupos:
- Importación de biblioteca estándar
- Importaciones de terceros
- Importaciones específicas de aplicaciones
Las importaciones deben ordenarse lexicográficamente dentro de estos grupos, ignorando el caso:
import foo
from foo import bar
from foo.bar import baz
from foo.bar import Quux
from Foob import ar
La guía de estilo de python sugiere agrupar importaciones como esta:
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
Sin embargo, no menciona nada sobre cómo deben establecerse las dos formas diferentes de importación:
from foo import bar
import foo
Hay varias formas de clasificarlos (supongamos que todas esas importaciones pertenecen al mismo grupo):
primero desde ...
from..import
, luegoimport
from g import gg from x import xx import abc import def import x
primera
import
, luego desde ...from..import
import abc import def import x from g import gg from x import xx
orden alfabético por nombre del módulo, ignorando el tipo de importación
import abc import def from g import gg import x from xx import xx
PEP8 no menciona el orden preferido para esto y las características de "importación de limpieza", algunos IDEs probablemente solo hagan lo que prefiera el desarrollador de esa característica.
Estoy buscando otro PEP aclarando esto o un comentario / correo electrónico relevante de la BDFL (u otro desarrollador principal de Python). Por favor, no publique respuestas subjetivas que indiquen su propia preferencia.
El PEP 8 no dice nada al respecto. No hay convención para este punto, y no significa que la comunidad de Python necesite definir una absolutamente. Una elección puede ser mejor para un proyecto pero lo peor para otro ... Es una cuestión de preferencias para esto, ya que cada solución tiene ventajas y desventajas. Pero si desea seguir las convenciones, debe respetar el orden principal que citó:
- importación de biblioteca estándar
- importaciones de terceros relacionadas
- aplicación local / importación específica de biblioteca
Por ejemplo, Google recomienda en esta página que la importación se clasifique lexicográficamente en cada categoría (estándar / de terceros / suya). Pero en Facebook, Yahoo y lo que sea, es quizás otra convención ...
Las importaciones generalmente se ordenan alfabéticamente y se describen en varios lugares además de PEP 8.
Los módulos ordenados alfabéticamente son más rápidos de leer y buscar . Después de todo, Python tiene que ver con la legibilidad. También es más fácil verificar que algo se importe y evita las importaciones duplicadas
No hay nada disponible en PEP 8 con respecto a la clasificación. Por lo tanto, se trata de la elección de lo que utiliza.
De acuerdo con algunas referencias de sitios de buena reputación y repositorios también de popularidad, el orden alfabético es el camino.
por ejemplo, así:
import httplib
import logging
import random
import StringIO
import time
import unittest
from nova.api import openstack
from nova.auth import users
from nova.endpoint import cloud
O
import a_standard
import b_standard
import a_third_party
import b_third_party
from a_soc import f
from a_soc import g
from b_soc import d
El repositorio oficial de Reddit también declara que, en general, se debe usar el orden de importación PEP-8. Sin embargo, hay algunas adiciones que son
for each imported group the order of imports should be:
import <package>.<module> style lines in alphabetical order
from <package>.<module> import <symbol> style in alphabetical order
Referencias
- https://code.google.com/p/soc/wiki/PythonStyleGuide
- https://github.com/reddit/reddit/wiki/PythonImportGuidelines
- http://docs.openstack.org/developer/hacking/
- http://developer.plone.org/reference_manuals/external/plone.api/contribute/conventions.html#grouping-and-sorting
PD: la utilidad isort ordena automáticamente tus importaciones.