Paquetes y módulos en Python
La modularización es uno de los pilares fundamentales del desarrollo profesional en Python. A medida que los proyectos crecen en complejidad, la capacidad de organizar el código en unidades lógicas y reutilizables se convierte en una habilidad esencial para cualquier programador.
Python ofrece un sistema robusto de módulos y paquetes que permite estructurar aplicaciones de manera escalable y mantenible. Este enfoque no solo mejora la legibilidad del código, sino que también facilita la colaboración en equipos de desarrollo y la reutilización de componentes entre diferentes proyectos.
¿Qué son los módulos?
Un módulo en Python es simplemente un archivo que contiene código Python ejecutable. Puede incluir definiciones de funciones, clases, variables y declaraciones ejecutables. El nombre del módulo corresponde al nombre del archivo sin la extensión .py
.
Cuando creamos un archivo llamado calculadora.py
, automáticamente estamos creando un módulo llamado calculadora
:
# calculadora.py
def sumar(a, b):
"""Suma dos números y devuelve el resultado."""
return a + b
def restar(a, b):
"""Resta dos números y devuelve el resultado."""
return a - b
PI = 3.14159
Este módulo puede ser importado y utilizado en otros archivos Python, permitiendo acceder a sus funciones y variables desde cualquier parte de nuestro proyecto.
Importación de módulos
Python proporciona varias formas de importar módulos, cada una con sus propias ventajas y casos de uso específicos.
Importación completa del módulo:
import calculadora
resultado = calculadora.sumar(5, 3)
print(f"El valor de PI es: {calculadora.PI}")
Importación de elementos específicos:
from calculadora import sumar, PI
resultado = sumar(10, 5)
print(f"PI = {PI}")
Importación con alias:
import calculadora as calc
from calculadora import sumar as suma
resultado = calc.restar(10, 3)
total = suma(2, 8)
La elección del método de importación depende del contexto y las necesidades específicas del código. La importación completa mantiene el espacio de nombres limpio, mientras que la importación específica puede hacer el código más legible cuando solo necesitamos algunas funciones.
Módulos de la biblioteca estándar
Guarda tu progreso
Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.
Más de 25.000 desarrolladores ya confían en CertiDevs
Python incluye una extensa biblioteca estándar con módulos predefinidos que cubren una amplia gama de funcionalidades. Estos módulos están disponibles sin necesidad de instalación adicional.
import math
import datetime
import random
import os
# Operaciones matemáticas avanzadas
raiz = math.sqrt(16)
seno = math.sin(math.pi / 2)
# Trabajo con fechas
ahora = datetime.datetime.now()
fecha_formateada = ahora.strftime("%Y-%m-%d %H:%M:%S")
# Generación de números aleatorios
numero_aleatorio = random.randint(1, 100)
elemento_aleatorio = random.choice(['python', 'java', 'javascript'])
# Interacción con el sistema operativo
directorio_actual = os.getcwd()
archivos = os.listdir('.')
Estos módulos demuestran la versatilidad de Python y cómo la modularización permite acceder a funcionalidades complejas con una sintaxis simple y clara.
Introducción a los paquetes
Un paquete es una forma de organizar módulos relacionados en una estructura jerárquica de directorios. Los paquetes permiten crear espacios de nombres estructurados que evitan conflictos de nombres y facilitan la organización de proyectos grandes.
La estructura básica de un paquete incluye un archivo especial llamado __init__.py
que indica a Python que el directorio debe tratarse como un paquete:
mi_proyecto/
__init__.py
modulo1.py
modulo2.py
subpaquete/
__init__.py
modulo3.py
El archivo __init__.py
puede estar vacío o contener código de inicialización del paquete. Este archivo se ejecuta automáticamente cuando se importa el paquete por primera vez.
Creación y uso de paquetes
Crear un paquete implica organizar los módulos en directorios y definir las interfaces públicas que queremos exponer. Consideremos un paquete para operaciones matemáticas:
matematicas/
__init__.py
basicas.py
avanzadas.py
geometria/
__init__.py
figuras.py
Contenido de matematicas/basicas.py
:
def sumar(a, b):
return a + b
def multiplicar(a, b):
return a * b
Contenido de matematicas/__init__.py
:
from .basicas import sumar, multiplicar
from .avanzadas import potencia
__version__ = "1.0.0"
__all__ = ['sumar', 'multiplicar', 'potencia']
Uso del paquete:
import matematicas
from matematicas.geometria import figuras
resultado = matematicas.sumar(5, 3)
area = figuras.area_circulo(10)
La variable __all__
define qué elementos se importan cuando se usa from paquete import *
, proporcionando control explícito sobre la interfaz pública del paquete.
Importaciones relativas y absolutas
Python distingue entre importaciones absolutas y relativas, cada una con sus propios casos de uso y mejores prácticas.
Las importaciones absolutas especifican la ruta completa desde la raíz del proyecto:
from matematicas.basicas import sumar
from matematicas.geometria.figuras import area_rectangulo
Las importaciones relativas utilizan puntos para indicar la posición relativa dentro del paquete:
# Desde matematicas/avanzadas.py
from .basicas import sumar # Mismo nivel
from ..utils import helper # Nivel superior
from .geometria.figuras import area_circulo # Subpaquete
Las importaciones relativas solo funcionan dentro de paquetes y proporcionan mayor flexibilidad cuando se reorganiza la estructura del proyecto, ya que no dependen de nombres absolutos de paquetes.
Completa Python y certifícate
Únete a nuestra plataforma y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.
Asistente IA
Resuelve dudas al instante
Ejercicios
Practica con proyectos reales
Certificados
Valida tus conocimientos
Más de 25.000 desarrolladores ya se han certificado con CertiDevs