Módulos y Paquetes
## Objetivos de Aprendizaje
- Crear e importar módulos
- Entender la ruta de búsqueda de módulos
- Trabajar con paquetes
- Usar pip para gestión de paquetes
## Módulos
### ¿Qué es un Módulo?
Un archivo Python (`.py`) es un módulo:
```python
# mi_modulo.py
def saludar(nombre):
return f"¡Hola, {nombre}!"
PI = 3.14159
```
### Importar Módulos
```python
import mi_modulo
print(mi_modulo.saludar("Ana")) # ¡Hola, Ana!
print(mi_modulo.PI) # 3.14159
```
### Importar Elementos Específicos
```python
from mi_modulo import saludar, PI
print(saludar("Bob")) # ¡Hola, Bob!
print(PI) # 3.14159
```
### Importar con Alias
```python
import mi_modulo as mm
print(mm.saludar("Carlos")) # ¡Hola, Carlos!
from mi_modulo import saludar as decir_hola
print(decir_hola("David")) # ¡Hola, David!
```
### Importar Todo
```python
from mi_modulo import * # Importa todos los nombres públicos
print(saludar("Eva")) # ¡Hola, Eva!
# Evita esto en producción - poco claro de dónde vino
```
## La Ruta de Búsqueda de Módulos
Python busca módulos en orden:
1. Directorio actual
2. Variable de entorno `PYTHONPATH`
3. Directorios predeterminados dependientes de la instalación
```python
import sys
print(sys.path) # Lista de directorios que Python busca
```
## Módulos de la Biblioteca Estándar
### Módulo os
```python
import os
print(os.getcwd()) # Directorio actual
os.listdir(".") # Listar archivos
os.mkdir("nueva_carpeta") # Crear directorio
os.rename("viejo.txt", "nuevo.txt") # Renombrar
os.remove("archivo.txt") # Eliminar archivo
os.path.exists("archivo.txt") # Verificar existe
os.path.join("dir", "archivo") # Unir rutas
```
### Módulo sys
```python
import sys
print(sys.version) # Versión de Python
print(sys.argv) # Argumentos de línea de comandos
sys.exit(0) # Salir del programa
print(sys.path) # Ruta de búsqueda de módulos
```
### Módulo math
```python
import math
print(math.pi) # 3.141592653589793
print(math.sqrt(16)) # 4.0
print(math.ceil(3.2)) # 4
print(math.floor(3.8)) # 3
print(math.pow(2, 3)) # 8.0
print(math.sin(math.pi/2)) # 1.0
```
### Módulo random
```python
import random
print(random.random()) # Float aleatorio 0-1
print(random.randint(1, 6)) # Int aleatorio 1-6
print(random.choice(["a", "b", "c"])) # Elección aleatoria
print(random.sample([1,2,3,4,5], 3)) # 3 elementos aleatorios
random.shuffle([1,2,3,4,5]) # Mezclar en lugar
```
### Módulo datetime
```python
import datetime
ahora = datetime.datetime.now()
print(ahora) # 2026-06-23 10:30:45.123456
print(ahora.year, ahora.month, ahora.day) # 2026 6 23
# Formateo de fecha
print(ahora.strftime("%Y-%m-%d")) # 2026-06-23
print(ahora.strftime("%H:%M:%S")) # 10:30:45
# Parsear fecha
fecha = datetime.datetime.strptime("2026-06-23", "%Y-%m-%d")
```
### Módulo json
```python
import json
datos = {"nombre": "Ana", "edad": 30}
json_str = json.dumps(datos) # A cadena JSON
parseado = json.loads(json_str) # Desde cadena JSON
# Operaciones de archivo
with open("datos.json", "w") as f:
json.dump(datos, f)
with open("datos.json", "r") as f:
cargado = json.load(f)
```
## Paquetes
### ¿Qué es un Paquete?
Un directorio con `__init__.py`:
```text
mi_paquete/
__init__.py
modulo1.py
modulo2.py
```
### __init__.py
```python
# mi_paquete/__init__.py
from .modulo1 import func1
from .modulo2 import func2
__all__ = ["func1", "func2"] # Qué obtiene 'from package import *'
```
### Importar desde Paquetes
```python
from mi_paquete import func1
from mi_paquete.modulo1 import func1
import mi_paquete
```
### Importaciones Relativas
```python
# En mi_paquete/sub_paquete/modulo.py
from .. import otro_modulo # Paquete padre
from . import modulo_hermano # Mismo paquete
```
## pip - Gestor de Paquetes
### Comandos Básicos
```bash
pip install nombre_paquete # Instalar
pip install paquete==1.2.3 # Versión específica
pip install "paquete>=1.0" # Versión mínima
pip install -r requirements.txt # Desde archivo
```
### Gestionar Paquetes
```bash
pip list # Listar instalados
pip show nombre_paquete # Mostrar info
pip uninstall nombre_paquete # Desinstalar
pip freeze > requirements.txt # Guardar dependencias
```
### Entornos Virtuales
```bash
python -m venv mi_entorno # Crear
source mi_entorno/bin/activate # Activar (Linux/Mac)
mi_entorno\Scripts\activate # Activar (Windows)
pip install paquete # Instalar en entorno
deactivate # Desactivar
```
## Crear Paquetes Instalables
### setup.py
```python
from setuptools import setup, find_packages
setup(
name="mipaquete",
version="1.0.0",
packages=find_packages(),
install_requires=[
"requests>=2.25.0",
],
author="Tu Nombre",
description="Una breve descripción",
)
```
### pyproject.toml (Moderno)
```toml
[build-system]
requires = ["setuptools>=45", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "mipaquete"
version = "1.0.0"
dependencies = ["requests>=2.25.0"]
```
## Paquetes Comunes de la Biblioteca Estándar
| Paquete | Propósito |
|---------|----------|
| os | Interfaz del sistema operativo |
| sys | Parámetros específicos del sistema |
| math | Funciones matemáticas |
| random | Generación de números aleatorios |
| datetime | Fecha y hora |
| json | Codificación/decodificación JSON |
| csv | Manejo de archivos CSV |
| re | Expresiones regulares |
| collections | Contenedores especializados |
| itertools | Herramientas de iteradores |
| functools | Funciones de orden superior |
| pathlib | Operaciones de rutas de archivos |
| urllib | Manejo de URLs |
| sqlite3 | Base de datos SQLite |
| unittest | Marco de pruebas |
## Resumen
- Los módulos son archivos `.py` que contienen código Python
- Importar con `import modulo` o `from module import nombre`
- Usar `as` para alias
- Los paquetes son directorios con `__init__.py`
- `pip install` instala paquetes de terceros
- Usar entornos virtuales para aislar dependencias
- `sys.path` muestra dónde Python busca módulos
Comments
Comments powered by Giscus
To enable comments, add your Giscus embed code here.
Learn more about Giscus →