Importaciones relativas vs absolutas en Python

    Si bien puede poner proyectos simples en un solo archivo, la mayoría de los proyectos de desarrollo de Python requerirán varios archivos para mantenerlos manejables. Eso significa que necesita una forma de importar un archivo a otro. Sin embargo, muchos Pythonistas encuentran confusa la importación de archivos. Afortunadamente, es fácil si conoce la diferencia entre las distintas declaraciones de importación de Python.

    ¿Qué es la importación?

    Importar se refiere a permitir que un archivo de Python o un módulo de Python acceda al script desde otro archivo o módulo de Python. Solo puede usar funciones y propiedades a las que puede acceder su programa. Por ejemplo, si desea utilizar funcionalidades matemáticas, primero debe importar el paquete matemático. Esto se debe a que debe definir todo lo que desea usar en Python antes de usarlos.

    Por ejemplo, Python daría un NameError para el siguiente código:

    myPi = math.pi
    

    Esto se debe a que ni el math objeto ni sus propiedades y métodos están disponibles de forma nativa para el lenguaje mismo. Usar el math objeto, primero debe importarlo.

    Te puede interesar:Optimización del rendimiento de Python
    import math
    
    myPi = math.pi
    print myPi
    

    los import declaración agrega el objeto al alcance actual de su programa.

    Cómo funcionan las importaciones

    los import Las declaraciones hacen mucho bajo el capó para importar archivos o módulos. Primero, buscan su módulo o paquete en sys.modules, donde Python almacena su código previamente importado. Si Python no puede encontrar el módulo allí, buscará en el Biblioteca estándar de Python para ello. Si Python aún no puede encontrar el módulo, pasará por todo su espacio de almacenamiento, comenzando con el directorio actual y los que figuran en su system.path. Si el módulo se encuentra en estos lugares, agregará el módulo a su programa, de lo contrario, dará un ModuleNotFoundError.

    Sintaxis de declaración de importación

    Para importar un módulo directamente, simplemente ponga el nombre del módulo o paquete después del import palabra clave. Tenga en cuenta que esta declaración distingue entre mayúsculas y minúsculas.

    import mymodule
    

    Sin embargo, Python ofrece una sintaxis más sofisticada para importar código. Este segundo formato incluye el from palabra clave también.

    Te puede interesar:Conversión de scripts de Python en archivos ejecutables
    from mypackage import mymodule
    

    En este formato, especificas tanto el módulo como el código que deseas junto con su ubicación. Pones el nombre de tu código, módulo o subpaquete para mymodule, y su ubicación para mypackage. Dicha declaración de importación es excelente si solo desea importar parte del código del paquete mencionado, y no el paquete en sí.

    Incluso puede cambiar el nombre del módulo incluyendo el as palabra clave.

    import mymodule as oMyFunction
    

    También puede utilizar el asterisco (*) como comodín. La siguiente declaración importará todas las funciones y propiedades contenidas en el math paquete.

    from math import *
    

    Independientemente de la sintaxis, siempre debe seguir las recomendaciones importar las mejores prácticas.

    Te puede interesar:Python: enumerar archivos en un directorio

    Importaciones absolutas

    Las importaciones absolutas incluyen la ruta completa a su script, comenzando con la carpeta raíz del programa. Si bien debe separar cada carpeta por un punto, puede hacer que sea tan largo como lo necesite.

    Los siguientes son ejemplos de importaciones absolutas:

    from package1.firstmodule import firstmodule
    import package1.secondmodule.myfunction
    
    Ventajas y desventajas absolutas de la importación

    A diferencia de otros lenguajes, la mayoría de los desarrolladores de Python prefieren usar importaciones absolutas sobre sus primos relativos. Esto se debe a que las importaciones absolutas dejan muy claro lo que está tratando de hacer. La ubicación real de sus archivos está ahí en su código. De hecho, puede usarlos en cualquier parte de su código. Simplemente funcionarán.

    Sin embargo, las importaciones absolutas pueden ser bastante largas. Si su proyecto tiene subpaquetes en subpaquetes en subpaquetes, sus declaraciones de importación pueden expandirse más allá de una sola línea de código. Cuando eso sucede, es mucho mejor utilizar importaciones relativas.

    Te puede interesar:Comprender las curvas ROC con Python

    También puede descubrir un problema al iniciar su programa utilizando diferentes archivos de inicio. El intérprete de Python solo declara la carpeta actual del archivo inicial como su sys.path raíz del paquete. Esto está bien si solo carga su programa usando archivos de la carpeta raíz. Esto es porque sys.path permanecerá estático a lo largo de su guión.

    Sin embargo, la situación cambia cuando inicia su programa desde una subcarpeta, o en cualquier otra situación donde su sys.path podría cambiar. Entonces, su «carpeta raíz» es la subcarpeta. Debido a que no puede usar importaciones implícitas (como veremos a continuación), cualquier archivo fuera de la subcarpeta se vuelve inaccesible para su programa.

    Tiene dos soluciones para esto. Puede iniciar la secuencia de comandos de la subcarpeta como un módulo importado o puede agregar sys.path directamente en su código.

    Por ejemplo:

    Te puede interesar:Introducción al módulo Python Pathlib
    • Importación de módulos como tiempo de ejecución: python -m packA.a2
    • Agregue sys.path antes de importar sus archivos:
    import os, sys
    sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
    from packA.subA import sa2
    

    Importaciones relativas

    Con las importaciones relativas, solo especifica dónde están sus recursos en relación con el archivo de código actual. Puede hacer esto de forma implícita o explícita, aunque las importaciones relativas implícitas se eliminaron en Python 3.

    En cuanto a la sintaxis, las importaciones relativas utilizan la notación de puntos. Los puntos individuales representan el directorio del script actual. Dos puntos representan la carpeta principal. Los puntos de Thress significan el abuelo, etc. Es posible que esté familiarizado con este sistema si utiliza un sistema operativo similar a UNIX o la consola de Windows.

    Los siguientes son ejemplos de importaciones relativas:

    • Importaciones explícitas
    import other
    from . import some_class
    from .subA import sa1
    
    • Importaciones implícitas
    from .some_module import some_class
    import some_function
    import subA.sa1
    

    Importaciones relativas y sus ventajas y desventajas

    Las importaciones relativas rara vez crecen mientras las importaciones absolutas. Incluso pueden convertir una declaración absoluta ridículamente larga en algo tan simple como:

    Te puede interesar:Lista doblemente enlazada con ejemplos de Python
    from ..my_sub_package.my_module import my_function
    

    Sin embargo, también ocultan las rutas a sus módulos. Esto podría estar bien si eres el único desarrollador, pero se complica si eres parte de un equipo de desarrollo donde la estructura de directorios real puede cambiar.

    ¿Qué importación usar?

    A menos que esté trabajando en un proyecto grande con varias capas de subpaquetes, siempre debe usar importaciones absolutas. De esa manera, cualquiera que lo mire entenderá fácilmente su código, incluido usted mismo si vuelve a él para actualizarlo más tarde. Incluso si tiene rutas largas, debe intentar escribir su programa para usar solo declaraciones absolutas para simplificar su código y su vida.

    Conclusión

    Como cualquier otro lenguaje de programación moderno, Python le permite importar código desde otros archivos o módulos. Sin embargo, esto puede convertirse en un proceso confuso y propenso a errores, a menos que comprenda los conceptos detrás del sistema de importación.

    En este artículo, analizamos las diversas formas de importar código en nuestros programas Python, incluidas las importaciones absolutas y relativas. También comparamos los pros y los contras de cada uno, que tienen sus ventajas en diferentes casos de uso.

     

    Rate this post

    Etiquetas: