Módulos y Paquetes

A medida que main.py crece, es fundamental organizar el código dividiéndolo según su funcionalidad.

  • Módulos: Son archivos .py que contienen funciones, clases o variables reutilizables. Se importan con import nombre_modulo.
  • Paquetes: Son carpetas que agrupan módulos relacionados. Deben incluir un archivo __init__.py (puede estar vacío) para que Python los reconozca como paquetes.

Esto facilita la mantenibilidad y reutilización del código. Veamos un ejemplo

mi_proyecto/
│── main.py           # Archivo principal
│── utilidades.py     # Módulo con funciones auxiliares
│
├── paquete/          # Paquete con varios módulos
│   │── __init__.py  # Indica que es un paquete
│   │── modulo1.py   # Módulo con funciones específicas
│   │── modulo2.py   # Otro módulo con más funciones

Para hacer uso de nuestros módulos en el fichero main.py tendríamos que importarlos de la siguiente manera:

import utilidades
from paquete import modulo1
from paquete.modulo2 import funcion1

if __name__ == "__main__":
    # ejecutamos una funcion definida en el modulo de utilidades
    utilidades.funcion1(args)
    # de la misma manera podemos ejecutar una funcion del modulo1
    modulo1.funcion1(args, **kwargs)
    resultado = funcion1(**kwargs) # esta funcion es la definida en el modulo2

Python posee modulos definidos en la librería estándar como la librería math. Que aunque no esté en nuestro árbol de ficheros del proyecto, también puede ser importado.

# Puedes importar
import math
print(math.sqrt(16)) #=> 4.0

# Puedes obtener funciones específicas desde un módulo
from math import ceil, floor
print(ceil(3.7)) #=> 4.0
print(floor(3.7))#=> 3.0

# Puedes importar todas las funciones de un módulo
# Precaución: Esto no es recomendable
from math import *

# Puedes acortar los nombres de los módulos como alias
import math as m
math.sqrt(16) == m.sqrt(16) #=> True

# Puedes encontrar que funciones y atributos definen un módulo.
import math
dir(math)