Cristhian Villegas
Backend10 min read0 views

Modulos y Paquetes: Organiza tu Codigo como un Profesional — Curso Python #7

Modulos y Paquetes: Organiza tu Codigo como un Profesional — Curso Python #7

Introduccion: por que organizar tu codigo en modulos

Logo de Python

Bienvenido a la parte 7 de 10 de nuestro curso de Python para principiantes. Hasta ahora hemos escrito todo nuestro codigo en un solo archivo. Eso funciona bien para scripts pequenos, pero imagina que tienes un programa con 5,000 lineas de codigo... seria un caos encontrar algo.

Los modulos son la solucion. Un modulo es simplemente un archivo .py que contiene funciones, variables y clases que puedes reutilizar en otros archivos. Es como organizar tu ropa en cajones: en lugar de tener todo amontonado, cada cajon tiene un proposito.

En este articulo aprenderas a:

  • Importar modulos que ya vienen con Python
  • Crear tus propios modulos
  • Usar los modulos mas utiles de la biblioteca estandar
  • Instalar paquetes externos con pip
  • Crear entornos virtuales para tus proyectos
📌 Nota: Este articulo es la parte 7 de 10 del curso de Python para principiantes. Si no has leido los articulos anteriores, te recomendamos empezar desde el principio para aprovechar al maximo este contenido.

Que es un modulo y como importarlo

Un modulo en Python es cualquier archivo con extension .py. Cuando escribes import nombre_modulo, Python busca ese archivo y te da acceso a todo lo que contiene.

Hay dos formas principales de importar:

Forma 1: import completo

python
1# Importamos todo el modulo math
2import math
3
4# Para usar algo, escribimos modulo.funcion
5resultado = math.sqrt(25)
6print(resultado)  # 5.0

Forma 2: from ... import (importar algo especifico)

python
1# Solo importamos la funcion sqrt
2from math import sqrt
3
4# Ahora la usamos directamente, sin el prefijo "math."
5resultado = sqrt(25)
6print(resultado)  # 5.0

Importar varias cosas a la vez

python
1from math import sqrt, pi, ceil
2
3print(sqrt(16))   # 4.0
4print(pi)          # 3.141592653589793
5print(ceil(4.2))   # 5

Dar un alias a un modulo

python
1# "as" te permite darle un nombre corto al modulo
2import math as m
3
4print(m.sqrt(9))  # 3.0
5print(m.pi)       # 3.141592653589793
💡 Tip: Evita usar from modulo import * (importar todo). Puede causar conflictos si dos modulos tienen funciones con el mismo nombre. Siempre es mejor ser explicito con lo que importas.

Crear tu propio modulo

Crear un modulo es tan simple como crear un archivo .py con funciones. Veamos un ejemplo paso a paso:

Paso 1: Crea un archivo llamado saludos.py

python
1# saludos.py - Este es nuestro modulo personalizado
2
3def hola(nombre):
4    """Saluda a alguien por su nombre."""
5    return f"¡Hola, {nombre}! Bienvenido."
6
7def despedida(nombre):
8    """Se despide de alguien."""
9    return f"¡Hasta luego, {nombre}! Nos vemos pronto."
10
11def saludo_formal(nombre, titulo="Sr."):
12    """Saludo formal con titulo."""
13    return f"Estimado {titulo} {nombre}, es un placer saludarle."

Paso 2: Usa tu modulo desde otro archivo

python
1# main.py - Archivo principal (debe estar en la misma carpeta)
2
3import saludos
4
5print(saludos.hola("Ana"))
6# ¡Hola, Ana! Bienvenido.
7
8print(saludos.despedida("Carlos"))
9# ¡Hasta luego, Carlos! Nos vemos pronto.
10
11# Tambien puedes importar funciones especificas
12from saludos import saludo_formal
13
14print(saludo_formal("Garcia", "Dra."))
15# Estimado Dra. Garcia, es un placer saludarle.
📌 Importante: Ambos archivos deben estar en la misma carpeta para que Python pueda encontrar el modulo. Mas adelante veremos como organizar modulos en paquetes (carpetas).

El modulo math: funciones matematicas utiles

El modulo math viene incluido con Python y tiene funciones matematicas que usaras frecuentemente. No necesitas instalar nada, solo importarlo.

python
1import math
2
3# Raiz cuadrada
4print(math.sqrt(144))    # 12.0
5
6# Redondear hacia arriba (ceil) y hacia abajo (floor)
7print(math.ceil(4.1))    # 5  (sube al entero siguiente)
8print(math.floor(4.9))   # 4  (baja al entero anterior)
9
10# El numero Pi
11print(math.pi)           # 3.141592653589793
12
13# Potencia
14print(math.pow(2, 10))   # 1024.0 (2 elevado a la 10)
15
16# Valor absoluto (para numeros con decimales)
17print(math.fabs(-7.5))   # 7.5
18
19# Factorial (util en combinatoria)
20print(math.factorial(5)) # 120 (5 x 4 x 3 x 2 x 1)

Ejemplo practico: calcular el area de un circulo

python
1import math
2
3def area_circulo(radio):
4    """Calcula el area de un circulo dado su radio."""
5    return math.pi * math.pow(radio, 2)
6
7# Probamos con un circulo de radio 5
8radio = 5
9area = area_circulo(radio)
10print(f"El area de un circulo con radio {radio} es: {area:.2f}")
11# El area de un circulo con radio 5 es: 78.54

El modulo random: generar numeros aleatorios

El modulo random te permite generar numeros aleatorios, elegir elementos al azar de una lista y mezclar datos. Es muy util para juegos, simulaciones y pruebas.

python
1import random
2
3# Numero entero aleatorio entre 1 y 10 (incluye ambos)
4print(random.randint(1, 10))   # Ejemplo: 7
5
6# Numero decimal aleatorio entre 0.0 y 1.0
7print(random.random())         # Ejemplo: 0.6543
8
9# Elegir un elemento al azar de una lista
10frutas = ["manzana", "platano", "naranja", "uva", "fresa"]
11print(random.choice(frutas))   # Ejemplo: "naranja"
12
13# Elegir varios elementos al azar (sin repetir)
14print(random.sample(frutas, 3))  # Ejemplo: ["uva", "manzana", "fresa"]
15
16# Mezclar una lista (la modifica directamente)
17numeros = [1, 2, 3, 4, 5]
18random.shuffle(numeros)
19print(numeros)                 # Ejemplo: [3, 1, 5, 2, 4]

Ejemplo practico: simular el lanzamiento de un dado

python
1import random
2
3def lanzar_dado():
4    """Simula el lanzamiento de un dado de 6 caras."""
5    return random.randint(1, 6)
6
7# Lanzamos el dado 5 veces
8print("Resultados de 5 lanzamientos:")
9for i in range(5):
10    resultado = lanzar_dado()
11    print(f"  Lanzamiento {i + 1}: {resultado}")
💡 Tip: Si necesitas que los numeros aleatorios sean siempre los mismos (util para pruebas), usa random.seed(42) al inicio. Esto hace que la secuencia sea reproducible.

El modulo datetime: trabajar con fechas y horas

El modulo datetime te permite trabajar con fechas, horas, y hacer calculos como saber cuantos dias faltan para una fecha.

python
1from datetime import datetime, date, timedelta
2
3# Fecha y hora actual
4ahora = datetime.now()
5print(ahora)  # 2026-04-05 14:30:00.123456
6
7# Solo la fecha de hoy
8hoy = date.today()
9print(hoy)    # 2026-04-05
10
11# Crear una fecha especifica
12mi_cumple = date(2026, 12, 25)
13print(mi_cumple)  # 2026-12-25
14
15# Calcular cuantos dias faltan
16diferencia = mi_cumple - hoy
17print(f"Faltan {diferencia.days} dias para Navidad")

Formatear fechas como texto

python
1from datetime import datetime
2
3ahora = datetime.now()
4
5# strftime = "string format time" (convierte fecha a texto)
6print(ahora.strftime("%d/%m/%Y"))          # 05/04/2026
7print(ahora.strftime("%d de %B de %Y"))    # 05 de April de 2026
8print(ahora.strftime("%H:%M:%S"))          # 14:30:00
9print(ahora.strftime("%A"))                # Sunday

Sumar y restar dias

python
1from datetime import date, timedelta
2
3hoy = date.today()
4
5# Sumar 30 dias
6en_un_mes = hoy + timedelta(days=30)
7print(f"Hoy: {hoy}")
8print(f"En 30 dias: {en_un_mes}")
9
10# Restar 7 dias
11hace_una_semana = hoy - timedelta(days=7)
12print(f"Hace una semana: {hace_una_semana}")

El modulo os: interactuar con el sistema operativo

El modulo os te permite interactuar con el sistema operativo: ver archivos, crear carpetas, obtener rutas, y mas.

python
1import os
2
3# Ver el directorio actual de trabajo
4print(os.getcwd())
5# Ejemplo: /home/usuario/mi-proyecto
6
7# Listar archivos y carpetas en el directorio actual
8archivos = os.listdir(".")
9print(archivos)
10# Ejemplo: ['main.py', 'saludos.py', 'datos']
11
12# Verificar si un archivo o carpeta existe
13print(os.path.exists("main.py"))      # True
14print(os.path.exists("no_existe.py")) # False
15
16# Crear una nueva carpeta
17if not os.path.exists("mi_carpeta"):
18    os.mkdir("mi_carpeta")
19    print("Carpeta creada")
20
21# Unir rutas de forma segura (funciona en Windows y Linux)
22ruta = os.path.join("mi_carpeta", "archivo.txt")
23print(ruta)  # mi_carpeta/archivo.txt

Ejemplo practico: listar solo archivos Python

python
1import os
2
3def listar_archivos_python(directorio="."):
4    """Lista todos los archivos .py en un directorio."""
5    archivos = os.listdir(directorio)
6    archivos_py = [f for f in archivos if f.endswith(".py")]
7    return archivos_py
8
9# Mostrar los archivos Python del directorio actual
10for archivo in listar_archivos_python():
11    tamano = os.path.getsize(archivo)
12    print(f"  {archivo} ({tamano} bytes)")
⚠️ Cuidado: Ten precaucion al usar funciones como os.remove() o os.rmdir(). Eliminan archivos y carpetas de forma permanente, sin pasar por la papelera de reciclaje.

Instalar paquetes externos con pip

Python tiene miles de paquetes creados por la comunidad que puedes instalar facilmente. pip es el gestor de paquetes de Python (viene incluido cuando instalas Python).

Comandos basicos de pip

python
1# Instalar un paquete
2pip install requests
3
4# Instalar una version especifica
5pip install requests==2.31.0
6
7# Ver los paquetes instalados
8pip list
9
10# Ver informacion de un paquete
11pip show requests
12
13# Guardar la lista de paquetes en un archivo
14pip freeze > requirements.txt
15
16# Instalar todos los paquetes de un archivo
17pip install -r requirements.txt
18
19# Desinstalar un paquete
20pip uninstall requests

Ejemplo: instalar y usar el paquete requests

python
1# Primero instala: pip install requests
2
3import requests
4
5# Hacer una peticion HTTP a una API publica
6respuesta = requests.get("https://api.github.com")
7
8print(f"Status: {respuesta.status_code}")  # 200
9print(f"Tipo: {respuesta.headers['content-type']}")
10
11# Ver los datos como JSON
12datos = respuesta.json()
13print(f"URL actual: {datos['current_user_url']}")
💡 Tip: Siempre usa pip freeze > requirements.txt para guardar las dependencias de tu proyecto. Asi cualquier persona puede instalar exactamente los mismos paquetes con pip install -r requirements.txt.

Entornos virtuales con venv

Un entorno virtual es una copia aislada de Python para cada proyecto. ¿Por que necesitas esto? Imagina que tienes dos proyectos:

  • Proyecto A necesita requests 2.28
  • Proyecto B necesita requests 2.31

Si instalas todo en el mismo lugar, uno de los dos proyectos se rompera. Los entornos virtuales resuelven esto: cada proyecto tiene su propio conjunto de paquetes independiente.

Crear y activar un entorno virtual

python
1# Paso 1: Crear el entorno virtual (solo una vez por proyecto)
2python -m venv mi_entorno
3
4# Paso 2: Activar el entorno virtual
5
6# En Windows:
7mi_entornoScriptsactivate
8
9# En macOS/Linux:
10source mi_entorno/bin/activate
11
12# Veras que tu terminal cambia, mostrando el nombre del entorno:
13# (mi_entorno) usuario@pc:~$
14
15# Paso 3: Instalar paquetes (se instalan SOLO en este entorno)
16pip install requests
17pip install flask
18
19# Paso 4: Guardar las dependencias
20pip freeze > requirements.txt
21
22# Paso 5: Desactivar el entorno cuando termines
23deactivate

Flujo de trabajo recomendado

python
1# 1. Crear carpeta del proyecto
2mkdir mi_proyecto
3cd mi_proyecto
4
5# 2. Crear entorno virtual
6python -m venv venv
7
8# 3. Activar
9source venv/bin/activate  # Linux/Mac
10venvScriptsactivate     # Windows
11
12# 4. Instalar dependencias
13pip install requests flask
14
15# 5. Guardar dependencias
16pip freeze > requirements.txt
17
18# 6. Trabajar en tu proyecto...
19python main.py
20
21# 7. Cuando termines
22deactivate
⚠️ Importante: Nunca subas la carpeta del entorno virtual a Git. Agrega venv/ a tu archivo .gitignore. Solo comparte el archivo requirements.txt.

Ejemplo practico: modulo de utilidades reutilizable

Vamos a crear un modulo completo con funciones utiles que puedes reutilizar en cualquier proyecto. Este ejemplo combina todo lo que aprendimos:

Archivo: utilidades.py

python
1# utilidades.py - Modulo de utilidades reutilizable
2
3import os
4import random
5import string
6from datetime import datetime, date
7
8# === Funciones de texto ===
9
10def limpiar_texto(texto):
11    """Elimina espacios extra y convierte a minusculas."""
12    return " ".join(texto.split()).strip().lower()
13
14def generar_password(longitud=12):
15    """Genera una contrasena aleatoria segura."""
16    caracteres = string.ascii_letters + string.digits + "!@#$%"
17    password = "".join(random.choice(caracteres) for _ in range(longitud))
18    return password
19
20def contar_palabras(texto):
21    """Cuenta las palabras en un texto."""
22    palabras = texto.split()
23    return len(palabras)
24
25# === Funciones de fecha ===
26
27def dias_entre_fechas(fecha1, fecha2):
28    """Calcula los dias entre dos fechas (formato: 'YYYY-MM-DD')."""
29    d1 = datetime.strptime(fecha1, "%Y-%m-%d").date()
30    d2 = datetime.strptime(fecha2, "%Y-%m-%d").date()
31    diferencia = abs((d2 - d1).days)
32    return diferencia
33
34def es_fin_de_semana():
35    """Retorna True si hoy es sabado o domingo."""
36    dia = date.today().weekday()
37    return dia >= 5  # 5=sabado, 6=domingo
38
39# === Funciones de archivos ===
40
41def listar_archivos(directorio=".", extension=None):
42    """Lista archivos en un directorio, opcionalmente filtrando por extension."""
43    archivos = os.listdir(directorio)
44    if extension:
45        archivos = [f for f in archivos if f.endswith(extension)]
46    return sorted(archivos)
47
48def tamano_legible(bytes_tamano):
49    """Convierte bytes a formato legible (KB, MB, GB)."""
50    for unidad in ["B", "KB", "MB", "GB"]:
51        if bytes_tamano < 1024:
52            return f"{bytes_tamano:.1f} {unidad}"
53        bytes_tamano /= 1024
54    return f"{bytes_tamano:.1f} TB"

Archivo: main.py (usando nuestro modulo)

python
1# main.py - Probando nuestro modulo de utilidades
2
3from utilidades import (
4    limpiar_texto,
5    generar_password,
6    contar_palabras,
7    dias_entre_fechas,
8    es_fin_de_semana,
9    listar_archivos,
10    tamano_legible,
11)
12
13# --- Funciones de texto ---
14texto = "  Hola   Mundo   PYTHON  "
15print(f"Texto limpio: '{limpiar_texto(texto)}'")
16# Texto limpio: 'hola mundo python'
17
18print(f"Password generada: {generar_password(16)}")
19# Password generada: aB3$kL9mNp2@xYqR
20
21articulo = "Python es un lenguaje de programacion muy popular"
22print(f"Palabras en el articulo: {contar_palabras(articulo)}")
23# Palabras en el articulo: 8
24
25# --- Funciones de fecha ---
26dias = dias_entre_fechas("2026-01-01", "2026-12-31")
27print(f"Dias entre las fechas: {dias}")
28# Dias entre las fechas: 364
29
30print(f"¿Es fin de semana? {'Si' if es_fin_de_semana() else 'No'}")
31
32# --- Funciones de archivos ---
33archivos_py = listar_archivos(".", ".py")
34print(f"Archivos Python: {archivos_py}")
35
36print(f"1,500,000 bytes = {tamano_legible(1_500_000)}")
37# 1,500,000 bytes = 1.4 MB
💡 Tip: Puedes crear una carpeta llamada utils/ con varios modulos dentro (texto.py, fechas.py, archivos.py) y un archivo __init__.py vacio para convertirla en un paquete. Asi organizas mejor tu codigo en proyectos grandes.

Resumen y proximo articulo

En este articulo aprendiste a organizar tu codigo Python como un profesional:

  • Modulos: archivos .py reutilizables que puedes importar con import
  • math: funciones matematicas como sqrt, ceil, floor y pi
  • random: numeros aleatorios, elegir al azar y mezclar listas
  • datetime: trabajar con fechas, calcular diferencias y formatear
  • os: interactuar con archivos y carpetas del sistema
  • pip: instalar paquetes de la comunidad Python
  • venv: crear entornos virtuales aislados para cada proyecto

En el proximo articulo (parte 8 de 10) aprenderemos Programacion Orientada a Objetos (POO): clases, objetos, herencia y todo lo necesario para escribir codigo mas organizado y profesional. ¡No te lo pierdas!

Share:
CV

Cristhian Villegas

Software Engineer specializing in Java, Spring Boot, Angular & AWS. Building scalable distributed systems with clean architecture.

Comments

Sign in to leave a comment

No comments yet. Be the first!

Related Articles