Importaciones absolutas y relativas en Python

Trabajando import en python:

Importar en Python es similar a #include header_fileC/C++. Los módulos de Python pueden obtener acceso al código de otro módulo importando el archivo/función usando import. La import declaración es la forma más común de invocar la maquinaria de importación, pero no es la única. La declaración de importación consta de la import palabra clave junto con el nombre del módulo.

La declaración de importación implica dos operaciones, busca un módulo y vincula el resultado de la búsqueda al nombre en el ámbito local. Cuando se importa un módulo, Python ejecuta todo el código en el archivo del módulo y se pone a disposición del archivo del importador.

Cuando se importa un módulo, el intérprete primero lo busca en sys.modules, que es el caché de todos los módulos que se han importado previamente. Si no lo encuentra, busca en todos los módulos integrados con ese nombre, si lo encuentra, el intérprete ejecuta todo el código y lo pone a disposición del archivo. Si el módulo no se encuentra, busca un archivo con el mismo nombre en la lista de directorios proporcionada por la variable sys.path.
sys.pathes una variable que contiene una lista de rutas que contienen bibliotecas de Python, paquetes y un directorio que contiene el script de entrada. Por ejemplo, se importa un módulo con nombre mathy luego el intérprete lo busca en los módulos integrados; si no se encuentra, busca un archivo con nombre math.pyen la lista de directorios proporcionada por sys.path.

# Python program importing
# math module
  
import math
print(math.pi)

Producción:

3.141592653589793

 
Sintaxis de declaraciones de importación:
el usuario puede importar tanto paquetes como módulos. (Tenga en cuenta que la importación de un paquete esencialmente importa el __init__.pyarchivo del paquete como un módulo). El usuario también puede importar objetos específicos de un paquete o módulo.
Generalmente hay dos tipos de sintaxis de importación. Cuando usa el primero, importa el recurso directamente.

import gfg

gfgpuede ser un paquete o un módulo.

Cuando el usuario usa la segunda sintaxis, el usuario importa el recurso de otro paquete o módulo.

from gfg import geek

geek puede ser un módulo, subpaquete u objeto, como una clase o función.
 
Estilo de declaraciones de importación:
PEP8 , la guía de estilo oficial de python, tiene un conjunto de reglas sobre cómo formular el código de python para maximizar su legibilidad. Para escribir declaraciones de importación hay algunos puntos a seguir:

  1. Las importaciones siempre deben escribirse en la parte superior del archivo, justo después de los comentarios del módulo y las strings de documentación.
  2. Las importaciones generalmente deben estar separadas por un espacio en blanco.
  3. Las importaciones deben agruparse en el siguiente orden.
  • Importaciones de biblioteca estándar (módulos integrados de Python)
  • Importaciones de terceros relacionados.
  • Importaciones específicas de bibliotecas/aplicaciones locales

También es bueno ordenar las declaraciones de importación alfabéticamente dentro de cada grupo de importación.

# Python program showing
# how to style import statements
  
import math
import os
  
# Third party imports
from flask import Flask
from flask_restful import Api
from flask_sqlalchemy import SQLAlchemy
  
# Local application imports
from local_module import local_class
from local_package import local_function

Importaciones absolutas:

La importación absoluta implica la ruta completa, es decir, desde la carpeta raíz del proyecto hasta el módulo deseado. Una importación absoluta indica que el recurso que se va a importar utiliza su ruta completa desde la carpeta raíz del proyecto.

Sintaxis y ejemplos prácticos:
Veamos que tenemos la siguiente estructura de directorios:

Aquí un directorio llamado proyecto, bajo el cual hay dos subdirectorios, a saber pkg1, pkg2. pkg1tiene dos módulos, módulo1 y módulo2.
pkg2 contiene tres módulos, module3, module4 __init__.pyy un nombre de subpaquete subpkg1 que contiene module5.py. Supongamos lo siguiente:

  • pkg1 / module1.pycontener una función, fun1
  • pkg2 / module3.pycontener una función, fun2
  • pkg2 / subpkg1 / module5.py contener una función fun3
# Python program showing
# practical example of
# absolute imports
  
# importing a fun1 from pkg1/module1
from pkg1.import module1 import fun1
  
from pkg1 import module2
  
# importing a fun2 from pkg2/module3
from pkg2 import module3 import fun2
  
# importing a fun3 from pkg2/subpkg1/module5
from pkg2.subpkg1.module5 import fun3

En este ejemplo, estamos importando los módulos escribiendo la ruta completa desde su carpeta raíz.
 
Pros y contras de las importaciones absolutas:
Pros:

  • Las importaciones absolutas son muy útiles porque son claras y directas.
  • La importación absoluta es fácil de saber exactamente de dónde está el recurso importado, simplemente mirando la declaración.
  • La importación absoluta sigue siendo válida incluso si cambia la ubicación actual de la declaración de importación.

Contras:
si la estructura del directorio es muy grande, el uso de importaciones absolutas no tiene sentido. En tal caso, el uso de importaciones relativas funciona bien.

from pkg1.subpkg2.subpkg3.subpkg4.module5 import fun6

Importaciones relativas:

La importación relativa especifica el objeto o módulo importado desde su ubicación actual, que es la ubicación donde reside la declaración de importación. Hay dos tipos de importaciones relativas:

  • Importaciones relativas implícitas:
  • La importación relativa implícita se ha rechazado en Python (3.x).

  • Importaciones relativas explícitas:
  • Se ha aprobado la importación relativa explícita en Python (3.x).

Sintaxis y ejemplos prácticos:
la sintaxis de la importación relativa depende de la ubicación actual, así como de la ubicación del módulo u objeto que se importará. Las importaciones relativas utilizan la notación de punto (.) para especificar una ubicación. Un solo punto especifica que el módulo está en el directorio actual, dos puntos indican que el módulo está en su directorio principal de la ubicación actual y tres puntos indican que está en el directorio principal y así sucesivamente.
Veamos que tenemos la siguiente estructura

de directorios: Supongamos lo siguiente:

  • pkg1 / module1.pycontener una función, fun1
  • pkg2 / module3.pycontener una función, fun2
  • pkg2 / subpkg1 / module5.py contener una función fun3
# Python program showing
# practical example of
# relative imports
  
# importing fun1 into pkg1/module1.py
from .module1 import fun1
  
# importing fun2 and fun3 into pkg2/module3.py 
from .module3 import fun2
from .subpackage1.module5 import fun3

Pros y contras de las importaciones relativas:
Pros:

  • Trabajar con importaciones relativas es conciso y claro.
  • Según la ubicación actual, reduce la complejidad de una declaración de importación.
    • Contras:

      • Las importaciones relativas no son tan legibles como las absolutas.
      • Usar importaciones relativas no es fácil porque es muy difícil saber la ubicación de un módulo.

Publicación traducida automáticamente

Artículo escrito por bestharadhakrishna y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *