5.5 Módulos
A medida que los programas crecen en tamaño y complejidad, se vuelve necesario organizar el código en varias partes. En Python, esta organización se logra mediante módulos y paquetes, que permiten dividir un programa en archivos independientes y reutilizar el código en diferentes proyectos.
El uso de módulos y paquetes favorece la modularidad, la mantenibilidad y la colaboración en equipos de desarrollo.
1️⃣ Qué es un módulo
Un módulo es simplemente un archivo de Python con extensión .py que contiene definiciones de variables, funciones o clases.
Su principal objetivo es reutilizar código importándolo desde otros programas.
Ejemplo básico de módulo
Supongamos que creamos un archivo llamado matematicas.py con el siguiente contenido:
def sumar(a, b):
return a + b
def restar(a, b):
return a - b
Ahora, desde otro archivo, podemos utilizar esas funciones importando el módulo:
import matematicas
print(matematicas.sumar(3, 4))
print(matematicas.restar(10, 5))
- Cada archivo
.pyactúa como un módulo independiente. - Con
import matematicasse carga el módulo completo en memoria. - Para acceder a sus funciones se usa la notación
nombre_modulo.funcion().
2️⃣ Tipos de importación
Python ofrece varias formas de importar contenido desde otros módulos.
🟩 Importación completa
Se importa el módulo entero mediante la palabra reservada import.
Es la forma más segura, ya que evita conflictos de nombres y deja claro de dónde procede cada función.
import matematicas
resultado = matematicas.sumar(2, 5)
🟦 Importación parcial
Se importan solo las funciones que se van a emplear. Es una forma cómoda, pero puede provocar colisiones de nombres si hay funciones con el mismo nombre en distintos módulos.
from matematicas import sumar
print(sumar(10, 20))
Importa solo la función sumar, por lo que puede utilizarse directamente sin el prefijo del módulo.
🟨 Importación múltiple
Permite importar varias funciones o variables a la vez. Se separan por comas dentro de la instrucción from.
from matematicas import sumar, restar
🟧 Importación con alias
Los alias son útiles para abreviar nombres de módulos largos o mejorar la legibilidad del código.
El uso de as define un nombre alternativo local para el módulo.
import matematicas as m
print(m.sumar(5, 5))
🟥 Importación global de nombres
Esta forma importa todos los nombres públicos del módulo en el espacio de nombres actual. Puede generar confusión y errores, especialmente en programas grandes, ya que es difícil saber de dónde procede cada función.
from matematicas import *
print(sumar(1, 2))
Evita esta forma salvo en pruebas rápidas o entornos controlados.
3️⃣ La Variable __name__
Cuando se ejecuta un archivo en Python, este recibe un valor especial en la variable __name__.
Si el archivo se ejecuta directamente, __name__ vale "__main__".
Si se importa como módulo, toma el nombre del archivo.
Ejemplo de uso
def mostrar_mensaje():
print("Este mensaje proviene del módulo utilidades.")
if __name__ == "__main__":
print("Ejecutado directamente.")
else:
print("Importado como módulo.")
- Si se ejecuta con
python utilidades.py, mostrará “Ejecutado directamente.” - Si se importa desde otro archivo (
import utilidades), mostrará “Importado como módulo.”
Esta técnica se usa para incluir bloques de prueba o demostración que solo se ejecuten cuando el archivo es principal.
4️⃣ Instalación de módulos externos
Existen miles de módulos desarrollados por la comunidad que pueden instalarse mediante la herramienta pip. A continuación se presentan dos ejemplos simples...
🟩 Módulo rich
rich es un módulo externo que permite mostrar texto con colores, tablas, barras de progreso, paneles y más directamente en la consola de Python, de forma sencilla y elegante.
py -m pip install rich
A continuación mostraremos unos ejemplos básicos pero para mas información...
- 👉 información completa sobre este módulo
- 👉 Breve turorial en vídeos cortos
Puedes usar etiquetas similares a HTML para dar color y formato al texto.
from rich import print
print("[bold red]Error:[/bold red] Archivo no encontrado")
print("[green]Operación completada con éxito[/green]")
print("[blue underline]Enlace importante[/blue underline]")

Colores disponibles:
red, green, yellow, blue, magenta, cyan, white, black
Estilos:
bold, italic, underline, reverse, blink, dim
Puedes usar emojis nativos de forma sencilla:
print("¡Hola! :smile: :rocket: :snake:")

Se puede consultar la lista completa de emojis compatibles aquí: 👉 https://www.webfx.com/tools/emoji-cheat-sheet/
Los paneles sirven para mostrar mensajes destacados.
from rich.panel import Panel
print(Panel("Bienvenido al sistema", title="💡 MENSAJE", subtitle="Todo OK"))
🧩 Puedes cambiar el color del borde:
print(Panel("Atención", title="⚠️ ALERTA", border_style="red"))

TableIdeal para mostrar datos de forma ordenada.
from rich.table import Table
from rich.console import Console
console = Console()
tabla = Table(title="Usuarios registrados")
tabla.add_column("ID", style="cyan", justify="center")
tabla.add_column("Nombre", style="green")
tabla.add_column("Rol", style="magenta")
tabla.add_row("1", "Ana", "Admin")
tabla.add_row("2", "Luis", "Editor")
tabla.add_row("3", "Marta", "Usuario")
console.print(tabla)

track() es una función del módulo rich.progress que envuelve un iterable (por ejemplo, range(), una lista o un generador) y muestra una barra de progreso mientras se recorre.
from rich.progress import track
for elemento in track(iterable, description="Texto..."):
# tu código aquí

🟦 Módulo requests
requests es un módulo externo de Python que permite realizar peticiones HTTP (GET, POST, PUT, DELETE…) de forma sencilla y legible.
Se usa para conectarse a APIs, descargar datos de páginas web o enviar información a un servidor.
py -m pip install requests
import requests
| Métodos Principales | Uso |
|---|---|
requests.get() | Obtener información |
requests.post() | Enviar información |
requests.put() | Actualizar datos |
requests.delete() | Eliminar recursos |
requests.head() | Obtener solo cabeceras |
Aquí puedes obtener la 👉 documentación completa de este módulo. A continuación se mencionan en el enlace
La más común: obtener información de una URL o API.
import requests
respuesta = requests.get("https://api.github.com")
print(respuesta.status_code) # Código de estado (200 = OK)
print(respuesta.text) # Contenido de la respuesta (en texto)
| Códigos Comunes | Significado |
|---|---|
| 200 | OK (éxito) |
| 404 | No encontrado |
| 500 | Error del servidor |
| 403 | Prohibido |
| 301 | Redirección |
Muchas APIs devuelven datos en formato JSON.
Puedes convertirlos directamente en un diccionario de Python con .json():
respuesta = requests.get("https://api.github.com/users/octocat")
datos = respuesta.json()
print(datos["login"]) # octocat
print(datos["id"]) # 583231
Sirve para enviar información, por ejemplo a un formulario o una API.
data = {"usuario": "ana", "edad": 25}
r = requests.post("https://httpbin.org/post", data=data)
print(r.status_code)
print(r.json()) # Muestra lo que se envió
Siempre es buena práctica comprobar si la petición fue exitosa:
r = requests.get("https://api.github.com/user")
if r.status_code == 200:
print("Petición exitosa")
else:
print("Error:", r.status_code)
import requests
def obtener_usuario(usuario):
"""Obtiene información pública de un usuario de GitHub."""
url = f"https://api.github.com/users/{usuario}"
r = requests.get(url)
if r.status_code == 200:
datos = r.json()
print(f"👤 Usuario: {datos['login']}")
print(f"📍 Ubicación: {datos.get('location', 'Desconocida')}")
print(f"📊 Repos públicos: {datos['public_repos']}")
else:
print("❌ No se encontró el usuario.")
obtener_usuario("octocat")
5️⃣ Módulos estándar de Python
Python incluye una extensa colección de módulos preinstalados, conocida como la biblioteca estándar (standard library). Esta biblioteca proporciona herramientas listas para usar que cubren prácticamente todas las necesidades del desarrollo cotidiano: manejo de archivos, cálculos matemáticos, fechas y horas, trabajo con texto, red, compresión, concurrencia, depuración y mucho más.
El objetivo de la biblioteca estándar es permitir que el programador resuelva la mayoría de los problemas sin necesidad de instalar librerías externas. Cada módulo agrupa funciones, clases y constantes relacionadas con una misma tarea, ofreciendo soluciones robustas y bien optimizadas mantenidas por el propio equipo de desarrollo de Python.
Gracias a esta colección, es posible escribir programas completos únicamente con las herramientas integradas en el lenguaje, lo que mejora la portabilidad, fiabilidad y mantenibilidad del código.
En este punto se estudiarán algunos de los módulos más comunes y utilizados de la biblioteca estándar, junto con ejemplos básicos que ilustran su uso. Por ejemplo...
- Módulos de cálculo y estadística: math, random, statistics.
- Módulos de sistema y archivos: os, pathlib, shutil.
- Módulos de tiempo y fechas: datetime, time, calendar.
- Módulos de texto, entorno y procesos: re, sys, subprocess.
Cada módulo se explicará con su propósito principal, funciones más relevantes y ejemplos prácticos. Al finalizar el tema, serás capaz de identificar qué módulo utilizar según la tarea y aprovechar las herramientas nativas de Python para resolver problemas comunes de programación.