requests_html requests library eyed3 python coding-style python-import pep8

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:

  1. Importación de biblioteca estándar
  2. Importaciones de terceros
  3. 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:

  1. importación de biblioteca estándar
  2. importaciones de terceros relacionadas
  3. 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 , luego import

    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ó:

  1. importación de biblioteca estándar
  2. importaciones de terceros relacionadas
  3. 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

PD: la utilidad isort ordena automáticamente tus importaciones.