Módulo 1 · Orientación

Lección 2 de 2

Entorno de trabajo y ejecución limpia

En esta páginaEl problema

El problema

Tu notebook funciona. Ejecutaste las celdas durante una hora, ajustaste valores, borraste una celda que ya no servía y al final el resultado es correcto. Cierras la sesión. Al día siguiente abres el mismo archivo en una sesión nueva, ejecutas todo desde el principio y falla en la celda tres con NameError.

Nada cambió en el código. Cambió el estado. La sesión anterior recordaba una variable que una celda borrada había creado. La sesión nueva no la conoce.

En una competencia de IA trabajas en un entorno fijo: un sistema, un notebook y paquetes preinstalados, con frecuencia sin Internet. Se evalúa el archivo que produces desde un estado limpio, no lo que viste en tu pantalla.

Entorno de trabajo

Tres herramientas aparecen con frecuencia en estas competencias y en la preparación:

  • Ubuntu u otro sistema Linux. Es el sistema operativo habitual en las máquinas de concurso. Ahí se trabaja con una terminal, rutas con / y, a veces, sin explorador de archivos visual.
  • JupyterLab. Ejecuta notebooks: archivos .ipynb divididos en celdas. Cada celda puede procesarse en cualquier orden. El kernel es el proceso de Python que recuerda las variables entre celdas.
  • VS Code u otro editor. Edita archivos .py y también notebooks. Es útil para revisar código completo, buscar en varios archivos y escribir funciones que después importas en el notebook.

Las condiciones exactas cambian por evento: versión de Python, paquetes disponibles, acceso a GPU, acceso a documentación. Verifica las condiciones publicadas de cada competencia antes de una simulación.

Un entorno fijo no te deja instalar lo que falta ni consultar lo que no recuerdas.

Estado oculto y orden de ejecución

El kernel recuerda todo lo que ejecutaste, en el orden en que lo ejecutaste. Esa memoria no está en el archivo. Cuando borras una celda, su efecto permanece en el kernel hasta que lo reinicias. Cuando ejecutas la celda ocho antes que la cinco, el kernel guarda ese orden, no el orden visual.

El resultado es un notebook que funciona para ti y falla para cualquier otro proceso que lo abra desde cero.

Pregunta. La siguiente celda crea una lista y le añade un valor. Si la ejecutas tres veces seguidas, ¿cuántos elementos tendrá la lista al final? Escribe tu respuesta antes de procesar.

Python 3 · ejemplo reproducible
registro = []
registro.append("intento 1")

print(len(registro))
Salida esperada

La salida esperada está oculta.

La regla práctica: cada celda debe poder ejecutarse después de todas las anteriores y antes de todas las siguientes. Si una celda depende de algo que ya no está en el archivo, el notebook tiene estado oculto.

Clean run

Un clean run es ejecutar el notebook completo desde un kernel recién iniciado. En JupyterLab el comando es Restart Kernel and Run All Cells. Reproduce lo que hará el sistema de evaluación con tu archivo.

Haz un clean run:

  1. antes de considerar terminada una parte del problema
  2. antes de generar el archivo que vas a entregar
  3. después de borrar o mover celdas
  4. cuando un resultado te sorprenda

Si el clean run falla, la causa está en el notebook, no en el kernel. Busca la variable que ya no se define, la celda que dependía de otra que moviste o el archivo que se creó en una ejecución anterior.

Semillas y reproducibilidad

Muchas operaciones de datos e IA usan azar: dividir un conjunto, inicializar un modelo, muestrear ejemplos. Sin control, cada ejecución produce un resultado distinto y no puedes saber si una mejora vino de tu cambio o del azar.

Una semilla fija el punto de partida del generador de números aleatorios.

Pregunta. La celda fija una semilla, pide dos números, vuelve a fijar la misma semilla y pide uno más. ¿El tercer número será igual al primero, al segundo o a ninguno?

Python 3 · ejemplo reproducible
import random

random.seed(42)
print(random.randint(1, 100))
print(random.randint(1, 100))

random.seed(42)
print(random.randint(1, 100))
Salida esperada

La salida esperada está oculta.

Fija la semilla al inicio del notebook, en una sola celda, y no la cambies durante un experimento. Si cambias la semilla y el resultado cambia mucho, tu solución depende del azar.

Rutas relativas

Un notebook que lee C:\Users\dan\Desktop\datos.csv falla en cualquier computadora que no sea la tuya. Un notebook que lee datos/sensores.csv funciona en cualquier lugar donde exista esa carpeta junto al notebook.

Pregunta. La celda construye una ruta relativa con pathlib. ¿Qué imprime en Linux? ¿Cambiaría en Windows?

Python 3 · ejemplo reproducible
from pathlib import Path

ruta = Path("datos") / "sensores.csv"
print(ruta)
Salida esperada

La salida esperada está oculta.

Antes de un clean run, comprueba que la carpeta existe y que el archivo tiene el nombre exacto que tu código espera. Mayúsculas y extensiones cuentan.

Para escribir un archivo de texto, write_text recibe el contenido y crea el archivo en la ruta indicada:

Python 3 · ejemplo reproducible
from pathlib import Path

Path("salida.txt").write_text("ok")

En un notebook, esa celda muestra 2: write_text devuelve el número de caracteres escritos.

Un notebook funciona cuando ejecutas las celdas una por una. Al usar Restart Kernel and Run All Cells falla en la celda tres con NameError. ¿Cuál es la causa más probable?

Puedes responder o seguir leyendo.

Selecciona una respuesta

Diagnóstico del entorno

Antes de la siguiente etapa, ejecuta este diagnóstico en tu propio entorno: es la evidencia de que puedes reproducir un ejemplo de la guía.

  1. Crea una carpeta para este diagnóstico y, dentro, un notebook diagnostico.ipynb con cuatro celdas: la semilla de esta lección, la lista de un elemento, la ruta con pathlib y una celda que escriba un archivo salida.txt con la palabra ok.
  2. Ejecuta Restart Kernel and Run All Cells.
  3. Comprueba que salida.txt existe y que las salidas de las tres primeras celdas coinciden con las de esta lección.
  4. Cierra el notebook, vuelve a abrirlo y repite el paso 2.

Si los dos clean runs producen lo mismo, tu entorno está listo. Si algo falla, corrígelo antes de seguir.

Errores que revisar

  • Si aparece NameError después de reiniciar, una celda usa algo que ninguna celda anterior define. Busca la definición y colócala antes.
  • Si los números cambian entre ejecuciones, falta una semilla o la fijas después de usar el azar.
  • Si aparece FileNotFoundError, imprime Path.cwd() y compara con la ruta que construiste. El notebook puede estar ejecutándose desde otra carpeta.
  • Si el notebook funciona pero tarda demasiado en un clean run, identifica la celda lenta. En competencia, el tiempo de ejecución suele estar limitado.
  • Si no puedes instalar un paquete, resuelve con los que ya están disponibles.

Cierre

Tu solución se reproduce cuando cada celda depende solo de las anteriores, la semilla está fija desde el inicio y las rutas son relativas y construidas con pathlib. El clean run es la prueba.

Lista de comprobación

  • ¿Tu notebook pasa Restart Kernel and Run All Cells dos veces con el mismo resultado?
  • ¿La semilla está en una celda al inicio y no cambia durante el experimento?
  • ¿Todas las rutas son relativas y usan pathlib?
Cargando progreso…