Importaciones en Python

Resumen

Contenido

Las importaciones permiten traer código de otro lado y ejecutarlo en el archivo actual, al hablar de --- existen importaciones absolutas y relativas.

Conocimiento previo

Hay ciertas cosas que debemos conocer antes de hablar de importaciones:

Sintaxis

Cuando hablamos de importaciones en Python, en realidad queremos llamar a ciertos módulos y/o paquetes. Ejemplo:

import module1 from package1 as otro_nombre

Donde busca python las importaciones

Python busca primero los que fueron importados antes, sys.modules; en modulo internos del lenguaje, buil-in; y en los directorios del proyecto, sys.path:

Guías de estilo

Hay ciertas reglas que es mejor seguir para mantener el código coherente y fácil de entender cuando se trata de importaciones:

Ejemplo de estilo:

# Standard library imports
import datetime
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

Estas son importaciones que usan la ruta absoluta de origen del proyecto para identificar que importar. Es la forma recomendada de hacer importaciones.

from package1.subpackage2.subpackage3.subpackage4.module5 import function6

Ejemplo de importaciones absolutas

Ruta de carpetas del proyecto:
Para el ejemplo asumiremos que el proyecto tiene la siguiente estructura de carpetas.

└── project
	├── main.py
    ├── package1
    │   ├── module1.py
    │   └── module2.py
    └── package2
    │   ├── __init__.py
    │   ├── module3.py
    │   ├── module4.py
    │   └── subpackage1
    │       └── module5.py

Objetos de los módulos.
Para el ejemplo asumiremos que los módulos (archivos) contienen ciertos objetos:

main.py
Queremos importar módulos y paquetes desde main.py.

from package1 import module1
from package1.module2 import function1
from package2 import class1
from package2.subpackage1.module5 import function2

Importaciones relativas

Permite hacer importaciones mas cortas, no llama a la importación desde la raíz si no desde la ubicación actual, por lo que depende de que la estructura del proyecto no cambie.

from .some_module import some_class
from ..some_package import some_function
from . import some_class

Archivo __init__.py

Este archivo declara que una carpeta se comportara como modulo, por lo general se puede quedar vacío, pero puede declarar las rutas y nombres de los paquetes y objetos dentro del modulo.