Cargando tu progreso…

Pokédex Codex

Python: Módulos y pip

META

🎯 Meta: usar código que ya escribieron otros. Vas a aprender a importar módulos de Python, instalar librerías con pip, y hasta consultar datos reales de internet con la PokéAPI.


🎮 Analogía: las MT (Máquinas Técnicas)

En los juegos Pokémon, las MT te enseñan ataques poderosos sin tener que entrenarlos desde cero. Las metés y listo, tu Pokémon ya sabe Rayo.

Los módulos y librerías son las MT del programador: código ya hecho que importás y usás. No reinventás la rueda: aprovechás el trabajo de millones de personas. 🧠


📦 import: traer un módulo

Un módulo es un archivo de Python lleno de funciones útiles. Python trae muchos “de fábrica” (la librería estándar). Para usarlos, los importás.

import math

print(math.sqrt(16))    # 4.0  (raíz cuadrada)
print(math.pi)          # 3.141592653589793
print(math.ceil(4.2))   # 5    (redondea para arriba)

Formas de importar

import math                  # importás todo el módulo, usás math.algo
from math import sqrt        # importás solo sqrt, lo usás directo
from math import sqrt, pi    # varios
import math as m             # le ponés un apodo: m.sqrt(16)

P: ¿Qué diferencia hay entre `import math` y `from math import sqrt`?
- Ninguna, hacen lo mismo
+ Con `import math` usás `math.sqrt()`; con `from math import sqrt` usás `sqrt()` directo
- `from math import sqrt` descarga una versión más nueva de `math`
> La segunda forma importa solo la función `sqrt` al espacio de nombres local, así la llamás sin el prefijo `math.`. Útil cuando usás mucho esa función.

🧰 Módulos estándar útiles

math — matemática

import math
math.sqrt(25)     # 5.0
math.ceil(4.1)    # 5
math.floor(4.9)   # 4
math.pow(2, 3)    # 8.0

random — azar

import random
random.randint(1, 6)               # número al azar entre 1 y 6 (dado)
random.choice(["Pikachu", "Onix"]) # elige uno al azar de la lista
random.shuffle(equipo)             # mezcla la lista (la modifica)

datetime — fechas y horas

from datetime import datetime, date
date.today()                  # la fecha de hoy
datetime.now()                # fecha y hora ahora
date.today().isoformat()      # "2024-06-04" (texto estándar)
datetime.now().year           # el año actual

os y sys — sistema

import os
os.path.exists("datos.txt")   # ¿existe el archivo? True/False
os.path.basename("/a/b/c.txt")# "c.txt" (solo el nombre)

import sys
sys.argv          # lista de argumentos pasados al programa
sys.exit()        # termina el programa

json — guardar/cargar datos estructurados

import json

datos = {"nombre": "Pikachu", "nivel": 25}

texto = json.dumps(datos)        # dict -> texto JSON
print(texto)                      # {"nombre": "Pikachu", "nivel": 25}

recuperado = json.loads(texto)   # texto JSON -> dict
print(recuperado["nombre"])      # Pikachu

# Guardar y cargar archivos JSON
with open("pokemon.json", "w") as f:
    json.dump(datos, f)
with open("pokemon.json", "r") as f:
    datos = json.load(f)
TIP

💡 JSON es el formato para guardar datos estructurados. Lo vas a usar en los proyectos finales. ¡Prestale atención!


🏗️ Crear tu propio módulo

Cualquier archivo .py tuyo es un módulo que podés importar desde otro archivo. ¡Así organizás proyectos grandes!

Archivo pokeutils.py:

def formatear_nombre(nombre):
    return nombre.capitalize()

def es_legendario(nombre):
    return nombre.lower() in ["mewtwo", "mew", "articuno"]

Archivo main.py (en la misma carpeta):

import pokeutils

print(pokeutils.formatear_nombre("pikachu"))   # Pikachu
print(pokeutils.es_legendario("Mewtwo"))       # True
TIP

💡 Acá tenés un pokeutils.py de ejemplo. Miralo: así se ven los módulos propios.


🛒 pip: instalar librerías externas

La librería estándar es enorme, pero a veces necesitás algo que no viene. pip es el instalador de paquetes de Python: tu PokéMart de librerías.

pip install requests       # instala la librería 'requests'
pip install flask          # instala Flask (para apps web)
pip list                   # muestra lo que tenés instalado
pip uninstall requests     # la desinstala

📦 venv: entornos virtuales

Un entorno virtual (venv) es una “cajita” aislada con sus propias librerías, separada del Python del sistema. Así cada proyecto tiene sus versiones sin pisarse.

python3 -m venv venv          # crea el entorno en la carpeta 'venv'
source venv/bin/activate      # lo activás (Linux/Mac)
pip install requests          # instala DENTRO del venv
deactivate                    # lo desactivás
TIP

💡 El setup.sh del curso hace esto por vos. Pero ahora entendés qué hace. 😎


📋 requirements.txt

Un archivo requirements.txt lista las librerías que tu proyecto necesita, para que cualquiera las instale de un saque:

requests>=2.31
flask>=3.0

Se instalan todas juntas con:

pip install -r requirements.txt

P: ¿Para qué sirve un entorno virtual (`venv`)?
- Para correr Python más rápido
+ Para tener las librerías de cada proyecto aisladas, sin mezclarse
- Para instalar Python sin necesitar permisos de administrador
> Cada proyecto puede tener sus propias versiones de librerías sin pisar las de otros proyectos. Es la práctica estándar en proyectos Python reales.

🌐 requests: consumir una API

Una API es un servicio en internet que te devuelve datos. La PokéAPI (https://pokeapi.co) tiene datos de TODOS los Pokémon, gratis.

La librería requests te deja pedir esos datos:

import requests

# Pedimos los datos de Pikachu.
respuesta = requests.get("https://pokeapi.co/api/v2/pokemon/pikachu")

# .json() convierte la respuesta a un diccionario de Python.
datos = respuesta.json()

print(datos["name"])                    # pikachu
print(datos["height"])                  # altura
print(datos["weight"])                  # peso
print(datos["types"][0]["type"]["name"])# electric
CUIDADO

⚠️ Para usar requests necesitás internet y tenerla instalada (pip install requests). Tené en cuenta el caso de “no hay internet” para que tu código no se rompa.


📝 Resumen

# Importar módulos estándar
import math, random, json, os
from datetime import date

math.sqrt(16)               # 4.0
random.choice(["a", "b"])  # uno al azar
json.dumps({"x": 1})       # '{"x": 1}'
date.today().isoformat()    # fecha de hoy

# Módulo propio
import pokeutils
pokeutils.formatear_nombre("pikachu")

# Instalar librerías
# pip install requests
# pip install -r requirements.txt

# Consumir una API
import requests
datos = requests.get("https://pokeapi.co/api/v2/pokemon/pikachu").json()
ConceptoPara qué sirve
importTraer código de otros
math/random/json/os/datetimeMódulos estándar
módulo propioTu propio .py reutilizable
pipInstalar librerías externas
venvEntorno aislado por proyecto
requirements.txtLista de dependencias
requestsPedir datos a una API

➡️ ¿Y ahora qué?

Ahora practicá: andá a los ejercicios de este tema y resolvelos. Se corrigen al instante con tests reales en tu navegador. 💪

ÁNIMO

“El mejor programador no es el que escribe más código, sino el que sabe reusar el de los demás.”