Las importaciones deben agruparse en el siguiente orden:
importaciones de biblioteca estándar
importaciones relacionadas de terceros
importaciones específicas de bibliotecas/aplicaciones locales
Sin embargo, no menciona nada sobre cómo se deben establecer las dos formas diferentes de importación:
from foo import bar
import foo
Hay varias formas de ordenarlos (supongamos que todos los importados pertenecen al mismo grupo):
primero from..importdespués import
from g import gg
from x import xx
import abc
import def
import x
primero importdespués from..import
import abc
import def
import x
from g import gg
from x import xx
orden alfabético por nombre de 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 funciones de “importaciones de limpieza” que algunos IDE probablemente solo hagan lo que prefiera el desarrollador de esa función.
Estoy buscando otro PEP que aclare esto o un comentario/correo electrónico relevante del BDFL (u otro desarrollador central de Python). Por favor, no publique respuestas subjetivas indicando su propia preferencia.
Dudo que haya una forma “correcta”. ¿Qué hay de malo en elegir tu propio estilo en esto? Difícilmente puede haber una convención si nadie la conoce. ¿Y realmente importa? ¿Cuál es la ventaja de tener esto especificado?
–Steven Rumbalski
24 de diciembre de 2013 a las 14:40
Consulte también este hilo relevante: Estándar de codificación de órdenes de importación.
– alecxe
11 de junio de 2014 a las 16:41
Abhishek
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. Además, es más fácil verificar que algo se importa y evita las importaciones duplicadas.
No hay nada disponible en PEP 8 con respecto a la clasificación. Así que se trata de elegir lo que usas.
De acuerdo con algunas referencias de sitios y repositorios de buena reputación, 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 establece que, en general, se debe usar el pedido de importación PEP-8. Sin embargo, hay algunas adiciones que son que para cada grupo importado el orden de las importaciones debe ser:
import <package>.<module> style lines in alphabetical order
from <package>.<module> import <symbol> style in alphabetical order
@liori Envié una referencia/enlaces relevantes que indican cómo ordenar los módulos. Como PEP 8 no menciona nada, pero muchas otras referencias sugieren usar métodos de importación como este.
– Abhishek
24 de diciembre de 2013 a las 19:26
Tenga en cuenta que la pregunta es sobre la clasificación import x y from y import z declaraciones relativas entre sí. No veo respuesta a esta pregunta en su respuesta. Básicamente, está reafirmando parte de la pregunta que ya explica la forma PEP8 de agrupar por tipo de importación. Si hay una respuesta a esta pregunta específica en algunos de los enlaces, cite las partes relevantes.
– liori
24 de diciembre de 2013 a las 20:14
¿Qué orden se debe utilizar para las importaciones privadas frente a las públicas? (import _tkinter contra import unittest)
– Stevoisiak
25 de mayo de 2018 a las 15:19
De acuerdo con las convenciones internas de codificación de la CIA (parte del Filtración de la Bóveda 7 de WikiLeaks), las importaciones de python deben agruparse en tres grupos:
Importaciones de biblioteca estándar
Importaciones de terceros
Importaciones específicas de la aplicación
Las importaciones deben ordenarse lexicográficamente dentro de estos grupos, ignorando mayúsculas y minúsculas:
import foo
from foo import bar
from foo.bar import baz
from foo.bar import Quux
from Foob import ar
Votó a favor por el factor de risa que son las pautas de estilo de codificación de la CIA. Muy inteligente, pero al mismo tiempo relevante dado el nivel de experiencia de esos desarrolladores.
Pero no se sigue del ejemplo si from x import y debe ser antes o despues from y import x – ¿Es el nombre del módulo o la importación real lo que determina el pedido?
– Niklas Rosencrantz
26 de agosto de 2019 a las 7:20
Sé que es una broma, pero como un verdadero nerd, quiero señalar que esto en realidad proviene de PEP8.
– Marat
15 de junio de 2020 a las 21:04
Maxime Lorant
El PEP 8 no dice nada al respecto. No existe una convención para este punto, y no significa que la comunidad de Python deba definir una absolutamente. Una elección puede ser mejor para un proyecto pero peor para otro… Es una cuestión de preferencias para esto, ya que cada solución tiene pros y contras. Pero si desea seguir las convenciones, debe respetar el orden principal que citó:
importaciones de biblioteca estándar
importaciones relacionadas de terceros
importaciones específicas de bibliotecas/aplicaciones locales
Por ejemplo, Google recomienda en esta página que la importación debe ordenarse lexicográficamente, en cada una de las categorías (estándar/de terceros/suya). Pero en Facebook, Yahoo y lo que sea, tal vez sea otra convención…
Para responder a la pregunta de forma más directa, las guías de estilo de Google recomiendan ordenar por ruta, que es la tercera opción de la pregunta: “orden alfabético por nombre de módulo, ignorando el tipo de importación”.
– Jezzamón
26 de febrero de 2021 a las 1:31
Siento que la respuesta aceptada es demasiado detallada. Aquí está TLDR:
Dentro de cada grupo, las importaciones deben ordenarse lexicográficamente, ignorando mayúsculas y minúsculas, de acuerdo con la ruta completa del paquete de cada módulo.
yo recomiendo isort. Desafortunadamente reorder-python-imports trata cualquier enlace simbólico como un tercero.
– correr_la_carrera
28 de junio a las 18:29
Astitva Srivastava
Todos import x Las sentencias deben ordenarse por el valor de x y todo from x import y Las sentencias deben ordenarse por el valor de x en orden alfabético y los grupos ordenados de from x import y declaraciones deben seguir el grupo ordenado de import x declaraciones.
import abc
import def
import x
from g import gg
from x import xx
from z import a
yo recomiendo isort. Desafortunadamente reorder-python-imports trata cualquier enlace simbólico como un tercero.
– correr_la_carrera
28 de junio a las 18:29
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
Dudo que haya una forma “correcta”. ¿Qué hay de malo en elegir tu propio estilo en esto? Difícilmente puede haber una convención si nadie la conoce. ¿Y realmente importa? ¿Cuál es la ventaja de tener esto especificado?
–Steven Rumbalski
24 de diciembre de 2013 a las 14:40
Consulte también este hilo relevante: Estándar de codificación de órdenes de importación.
– alecxe
11 de junio de 2014 a las 16:41