Jupyter Notebook es un conocido software de Python para computación interactiva que nació en 2014 como evolución de IPython, el intérprete que Fernando Pérez creó en 2001. En esta guía aprenderás a instalarlo con uv, el gestor de paquetes de Astral, en Ubuntu y Fedora, y lo pondrás a prueba con dos ejemplos gráficos, que te darán una idea de todo su poder.
El plan es sencillo: primero instalamos uv, después JupyterLab y por último abrimos un notebook para hacer dos ejemplos reales con numpy, pandas y matplotlib. No necesitas conocimientos previos de Python para seguir el ritmo, aunque algo de base siempre ayuda.
¿Qué es Jupyter y por qué se llama así?
Para entender qué es Jupyter hay que retroceder un cuarto de siglo. En 2001, Fernando Pérez era un estudiante de doctorado de física en la Universidad de Colorado en Boulder, frustrado con el intérprete interactivo de Python, que comparaba con «un juguete lisiado» frente a los cuadernos de Mathematica que usaba en su investigación. Ese verano escribió un pequeño archivo de arranque de 259 líneas para mejorar su experiencia en la terminal. Ese fue el germen de IPython.
El proyecto creció despacio pero con rumbo. Brian Granger se sumó en 2004 y en 2011 el equipo liberó la primera versión del Notebook de IPython, un documento web que combinaba código ejecutable, texto y resultados gráficos. El salto definitivo llegó en 2014, cuando el proyecto anunció en la conferencia SciPy su escisión de IPython con un nuevo nombre, Project Jupyter, impulsado por siete miembros fundadores.
Ese fue el origen de la herramienta que tienes delante.
El fin de la propiedad, por qué Apple y Sony imponen el alquiler
Un homenaje doble
El nombre es un homenaje doble. Por un lado, recuerda a los tres lenguajes de ciencia de datos que inspiraron la arquitectura, Julia, Python y R, no como acrónimo sino como reconocimiento a que todos son ciudadanos de primera clase.
Por otro, rinde tributo a los cuadernos de Galileo, los manuscritos donde el astrónomo registró en 1610 el descubrimiento de las lunas de Júpiter y que se consideran el primer ejemplo de ciencia abierta documentada. Jupyter quería ser, en esencia, el cuaderno de laboratorio digital del siglo XXI.
El apoyo económico explica buena parte de su éxito. La Fundación Alfred P. Sloan financió con 1,15 millones de dólares en 2013 y 2014 los primeros componentes como nbconvert, los widgets interactivos y el prototipo de JupyterHub.
Un año después, en 2015, un grant conjunto de seis millones de dólares de las fundaciones Helmsley, Moore y Sloan permitió construir JupyterLab, la interfaz moderna que hoy todos conocemos.
Su primera versión estable llegó en febrero de 2018.
Software libre para el mundo
Pero el reconocimiento de la comunidad llegó incluso antes. En 2017, el comité del proyecto recibió el premio ACM Software System Award, uno de los más prestigiosos del software libre. Conviene recordar una distinción que genera confusión: Jupyter es el proyecto y el ecosistema, mientras que IPython sigue existiendo como el kernel de Python, el motor que ejecuta el código dentro de Jupyter.
La parte independiente del lenguaje se trasladó a Jupyter, que hoy soporta más de un centenar de kernels creados por terceros, de R a Julia, de Haskell a Ruby. La versión estable más reciente, JupyterLab 4.6, se publicó el 18 de junio de 2026, hace menos de tres meses, y el clásico Notebook 7.6 compartió lanzamiento al estar construido sobre la misma base.
¿Qué es exactamente un notebook? El comienzo de todo
Un notebook es un documento que mezcla código ejecutable, texto con formato, ecuaciones y resultados en celdas organizadas de arriba abajo. Cada celda puede ser de código o de texto enriquecido, y puedes ejecutarlas en cualquier orden, lo que convierte la exploración de datos en una conversación fluida con tu propia máquina. Es el equivalente digital del cuaderno de laboratorio donde anotas, calculas y corriges a la vez.
La arquitectura separa dos mundos. El frontend, que ves en el navegador, es JupyterLab o el Notebook clásico. El kernel es un proceso independiente que recibe el código, lo ejecuta y devuelve los resultados, que pueden ser texto, tablas, gráficos o incluso widgets interactivos. Esa separación es lo que permite que el mismo notebook funcione con distintos lenguajes: solo cambias el kernel. Cuando instalas Jupyter con Python, el kernel es ipykernel, la versión moderna del antiguo IPython.
Nvidia compra Hugging Face por casi 13.000 millones de dólares
Objetivo principal del proyecto
El objetivo principal del proyecto, tal y como lo definen sus creadores, es la computación interactiva y la creación de «narrativas computacionales» reproducibles. La idea fuerza es que el resultado de una investigación o de un análisis no sea solo el gráfico final, sino todo el proceso que lo genera, documentado paso a paso en el propio documento. Si cambias un dato, reejecutas la celda y todo el análisis se actualiza en cadena. Para el periodismo de datos, el análisis financiero o la ciencia, esa trazabilidad vale oro.
Jupyter aporta además un puñado de accesos directos que llamamos magias. La más útil para esta guía es %pip, que permite instalar paquetes dentro del propio notebook sin salir del navegador. Otras populares son %timeit, para medir tiempos de ejecución, o %matplotlib inline, que incrusta los gráficos en el documento en lugar de abrirlos en ventanas separadas. El formato nativo es .ipynb, un archivo JSON que puedes versionar con git, compartir y exportar a HTML, PDF o incluso a scripts Python con una sola orden.
Ese modelo de trabajo explica su expansión. Los artículos científicos reproducibles, los análisis de tesorerías y fondos, los informes de periodismo de datos e incluso muchos libros de texto modernos se distribuyen como notebooks, porque el lector ve el código, los datos y los resultados en el mismo documento. Git los trata como texto plano y servicios como GitHub los renderizan en el navegador, lo que facilita revisar el trabajo de cualquier otro equipo.
Instalando Jupyter con uv
Durante años, instalar Jupyter era sinónimo de pip install jupyter, con su séquito de problemas: entornos que contaminaban el Python del sistema, versiones que chocaban entre sí y resoluciones de dependencias que podían tardar minutos. El desorden tenía un nombre y una solución.
Ahí entra uv, el gestor de paquetes y proyectos escrito en Rust por Astral, la empresa creadora del linter Ruff.
uv nació en 2023 con una promesa ambiciosa: sustituir de un plumazo a herramientas como pip, pipx, poetry, pyenv, virtualenv y twine, y hacerlo entre 10 y 100 veces más rápido que pip gracias a su resolución y descarga concurrentes, con una caché global en disco que deduplica dependencias entre proyectos. En 2026, con la serie 0.12, todo esto ya no es una promesa: es una de las herramientas Python más adoptadas del ecosistema.
La ventaja que más te interesa aquí es el aislamiento. Cuando instalas JupyterLab como un «tool» con uv, este crea un entorno virtual propio, separado del Python del sistema y de tus proyectos. El ejecutable jupyter-lab queda disponible en tu PATH, pero vive en una cajita aislada que no rompe nada. Si quieres desinstalarlo, un solo comando lo elimina sin dejar rastro. Es exactamente el modelo de gestión que evita los infiernos de dependencias que han perseguido a Python durante dos décadas.
| Forma de instalación | Qué consigues | Cuándo elegirla |
|---|---|---|
uv tool install jupyterlab | JupyterLab global, aislado en su propio entorno | Uso ocasional; no toca el Python del sistema |
uv tool run jupyter lab | Entorno efímero que se crea y se descarta al terminar | Probar Jupyter sin instalar nada permanente |
Proyecto con uv add y uv run | Entorno reproducible por proyecto con un lockfile | Análisis serios que quieras compartir o versionar |
Este espíritu de herramienta libre que simplifica la vida ya lo exploramos en Observatorio con la guía para convertir un USB en un multiboot permanente con Ventoy, y uv responde a la misma filosofía: un ejecutable único, rápido y que resuelve un dolor real.
Prerrequisitos para empezar
Antes de escribir el primer comando, comprueba que tienes lo necesario. La tabla resume lo que pide cada distribución.
| Requisito | Ubuntu | Fedora |
|---|---|---|
| Distribución | 22.04, 24.04 o 26.04 LTS | Fedora 41 en adelante |
| Terminal | Bash o cualquier shell compatible | Igual |
curl | Necesario, se instala con apt | Opcional, ya viene instalado |
| Python del sistema | No hace falta, uv gestiona el suyo | No hace falta |
| Espacio en disco | Unos 2 GB entre entorno y caché | Igual |
La clave de esta guía es que no necesitas un Python instalado a mano. uv baja y gestiona su propio intérprete bajo demanda, por lo que puedes empezar en un sistema prácticamente recién instalado. Eso simplifica el proceso y evita conflictos con el Python de tu distribución, que a veces está vinculado a herramientas del propio sistema y no conviene tocar.
El kernel de Linux: 35 años del corazón que domina el mundo tech
¿Cómo instalar uv en Ubuntu?
En Ubuntu la situación es peculiar: uv no está empaquetado en los repositorios oficiales en 2026, por lo que sudo apt install uv falla con un mensaje de paquete no localizable. La vía recomendada por Astral es su instalador independiente, que descarga el binario actualizado directamente de la página del proyecto.
Primero asegúrate de tener curl instalado y el índice de paquetes actualizado:
sudo apt update && sudo apt install -y curlDespués ejecuta el instalador oficial. El comando descarga un script y lo ejecuta con el shell, así que revisa antes la página de instalación si eres de los que desconfían de ese patrón:
curl -LsSf https://astral.sh/uv/install.sh | shEl instalador coloca uv y uvx en ~/.local/bin y añade ese directorio a tu PATH. Cierra y reabre la terminal, o ejecuta uv ensure-path para que el ajuste se aplique sin reiniciar. Verifica la instalación:
uv --versionDeberías ver una versión de la serie 0.12, que es la actual en septiembre de 2026. Si el comando no se encuentra, comprueba que ~/.local/bin está en tu variable PATH y añádelo a ~/.bashrc si hace falta. Como alternativa, también puedes instalar uv con pipx (pipx install uv) o con la snap oficial astral-uv, pero el instalador independiente es el que recibe antes las novedades.
¿Cómo instalar uv en Fedora?
Fedora tiene la ventaja de que uv sí está en sus repositorios oficiales desde hace varias versiones, así que la instalación es la clásica de cualquier paquete del sistema. Abre una terminal y ejecuta:
sudo dnf install uvCuando termine, comprueba la versión con el mismo comando de siempre:
uv --versionEl paquete de los repositorios de Fedora suele ir una o dos versiones por detrás del instalador oficial, pero para esta guía da exactamente igual. Un detalle que conviene saber: cuando uv se instala con el gestor de paquetes de la distribución, la auto-actualización está desactivada por diseño, así que para actualizarlo usarás sudo dnf upgrade uv en lugar de uv self update. Si prefieres tener siempre la última versión, el instalador independiente de Astral funciona igual en Fedora y convive sin problemas con la vía oficial.
¿Cómo instalar JupyterLab con uv?
Con uv instalado en tu sistema, el siguiente paso es idéntico en Ubuntu y en Fedora. La forma más directa es instalarlo como herramienta global, aislada del resto del sistema:
uv tool install jupyterlab --with pipFíjate en el --with pip. Es un detalle que parece menor y resulta esencial: el entorno aislado que crea uv no trae pip por defecto, y sin él la magia %pip del notebook falla con un error de «no module named pip». Este mismo problema lo documentó Simon Willison cuando empezó a experimentar con uv en 2025, y la solución oficial de la documentación de JupyterLab es exactamente ese modificador.

El comando termina en unos segundos y te indica los ejecutables instalados: jupyter-lab, junto con sus compañeros de extensión. Un matiz de nomenclatura que te ahorrará un susto: el comando es jupyter-lab con guion, no jupyter lab. Muchas guías antiguas usan la segunda forma, pero con la instalación como tool solo existe la primera.
Para arrancar el servidor:
jupyter-labSe abrirá tu navegador en http://localhost:8888/lab con la interfaz de JupyterLab. La primera ejecución puede tardar un poco porque construye la caché de fuentes de matplotlib y de los componentes de la interfaz; es normal y no se repite.

Existe una segunda vía más formal, orientada a proyectos reproducibles. Crea un directorio para tu análisis, inicializa un proyecto y añade las dependencias:
mkdir mi-proyecto && cd mi-proyecto
uv init
uv add jupyterlab numpy pandas matplotlibCon esto uv genera un pyproject.toml y un uv.lock, y crea un entorno virtual propio en .venv. Para abrir el notebook de ese proyecto:
uv run jupyter-labEsta opción es la recomendada si planeas compartir el análisis: cualquiera que clone tu repositorio puede reproducir el entorno exacto con uv sync. Para esta guía, la vía rápida de la herramienta global es más que suficiente.
Solana convierte su logo en valla publicitaria y recauda 167.000 dólares para Nepal
Arrancar el servidor y crear tu primer notebook
Cuando se abra JupyterLab verás tres zonas: la barra de herramientas, el lanzador central y el panel de archivos a la izquierda. En el lanzador hay una sección de Notebook con un icono de Python 3. Haz clic en él y se creará un Untitled.ipynb con una celda de código lista para escribir.
El kernel Python 3 viene incluido, porque JupyterLab arrastra a ipykernel como dependencia y uv gestiona su propio intérprete. De hecho, en el entorno del tool que hemos instalado, uv descargó Python 3.13, por lo que no dependes de la versión de tu distribución.
JupyterLab es además multitarea. Junto al notebook puedes abrir una terminal embebida en el navegador, un editor de texto para tus scripts auxiliares o un visor de datos, todo en pestañas que reordenas arrastrando. El panel izquierdo actúa como gestor de archivos: si creas carpetas desde ahí, el servidor las crea en tu disco, y puedes subir datos arrastrándolos desde el escritorio.
El flujo de trabajo es circular: escribes código en una celda, pulsas Shift + Enter para ejecutarla, y el resultado aparece debajo. Si solo quieres avanzar sin ejecutar, puedes pulsar Enter para escribir en una celda nueva. Las teclas que más usarás son Shift + Enter (ejecutar), B (celda nueva debajo) y M (convertir la celda a texto). Los menús de JupyterLab te muestran el resto de atajos con Ctrl + Shift + P.
Antes del primer ejemplo, instala las librerías científicas dentro del propio notebook con la magia %pip, aprovechando que incluimos pip en la instalación:
%pip install numpy pandas matplotlibVerás el progreso de la descarga directamente en la salida de la celda. En un sistema reciente, numpy, pandas y matplotlib se instalan en menos de un minuto. Comprueba que todo funciona con una celda de bienvenida:
import numpy as np
import pandas as pd
import matplotlib
print("Todo listo. Versión de pandas:", pd.__version__)El texto Todo listo confirma que el kernel está vivo y que las tres librerías que usaremos en los ejemplos están disponibles.
Ejemplo 1, un primer gráfico con numpy y matplotlib
El primer ejemplo es el clásico de iniciación a matplotlib: representar funciones trigonométricas. Sirve para comprobar que el ciclo completo funciona, desde importar librerías hasta ver el gráfico incrustado en el notebook.
Crea una celda nueva y escribe este código:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2 * np.pi, 200)
y_sin = np.sin(x)
y_cos = np.cos(x)
print("Primeros 5 valores de x:", x[:5])
print("Primeros 5 valores de sin(x):", np.round(y_sin[:5], 4))
fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(x, y_sin, label="sin(x)", linewidth=2)
ax.plot(x, y_cos, label="cos(x)", linewidth=2)
ax.set_title("Funciones trigonométricas con numpy y matplotlib")
ax.set_xlabel("x (radianes)")
ax.set_ylabel("y")
ax.legend()
ax.grid(alpha=0.3)
plt.show()Desmenucemos qué hace cada línea. np.linspace(0, 2 * np.pi, 200) genera 200 puntos equiespaciados entre 0 y 2π, el período completo de ambas funciones. np.sin y np.cos calculan el seno y el coseno de cada uno de esos puntos. Después, plt.subplots crea la figura y el eje donde dibujamos, ax.plot traza cada curva con su etiqueta y ax.legend() coloca la leyenda. El toque final, plt.show(), incrusta el resultado en el notebook.
El resultado es un gráfico con dos curvas: el seno en azul, que empieza en 0 y sube hasta el máximo en π/2, y el coseno en naranja, que arranca en 1 y se cruza con el seno en π/4. Sobre el mismo eje verás las dos etiquetas en la esquina superior y una rejilla tenue que facilita leer los valores. Si algo no sale, lo más probable es que falte una librería: reejecuta la celda de %pip install y vuelve a intentarlo.

Este ejemplo encierra la lógica fundamental de matplotlib: se crea una figura, se trazan datos sobre un eje y se decoran los ejes con títulos y leyendas. Todo lo que hagas después, por complejo que sea, es variación de este mismo esqueleto. Guarda el notebook con Ctrl + S; el archivo .ipynb queda listo para compartir.
Google elimina uBlock Origin de Chrome: así puedes seguir navegando sin publicidad
Ejemplo 2, medias móviles de una serie de precios con pandas
El segundo ejemplo sube un escalón y conecta directamente con el mundo que cubrimos en Observatorio: analizar una serie temporal de precios. Vamos a simular 120 días de cotizaciones de una criptomoneda y a dibujar sobre ellas dos medias móviles, una de 20 días y otra de 50, el tipo de indicador que usan muchos traders para detectar tendencias.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
rng = np.random.default_rng(42)
precios = 25000 * np.cumprod(1 + rng.normal(0.0008, 0.03, 120))
fechas = pd.date_range("2026-01-01", periods=120, freq="D")
serie = pd.Series(precios, index=fechas)
sma20 = serie.rolling(20).mean()
sma50 = serie.rolling(50).mean()
fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(serie.index, serie, label="Precio diario", linewidth=1.5)
ax.plot(serie.index, sma20, label="Media móvil 20 días", linewidth=1.5)
ax.plot(serie.index, sma50, label="Media móvil 50 días", linewidth=1.5)
ax.set_title("Precio diario con medias móviles de 20 y 50 días")
ax.set_xlabel("Fecha")
ax.set_ylabel("Precio (USD)")
ax.legend()
ax.grid(alpha=0.3)
plt.show()La parte de datos mezcla dos piezas. rng.normal genera 120 variaciones diarias con una ligera deriva positiva, y np.cumprod las encadena para construir una serie de precios que arranca en 25.000 dólares. pd.date_range crea el calendario de los 120 días desde el 1 de enero de 2026, y pd.Series une ambos, precios con fechas, en la estructura de datos estrella de pandas.
La parte de indicadores es la más elegante. serie.rolling(20).mean() calcula la media móvil simple de 20 días: para cada fecha, la media de los 20 precios anteriores. Como el cálculo necesita 20 observaciones para empezar, la curva deja el tramo inicial sin datos, y lo mismo ocurre con la de 50 días, que arranca aún más tarde. Esa es la señal visual que buscas cuando miras el gráfico: la media móvil larga no empieza hasta pasado un tercio del periodo.
El resultado es un gráfico donde el precio diario en verde serpentea con volatilidad, mientras la media de 20 días en azul le sigue más suavemente y la de 50 en rojo casi no se inmutan con los vaivenes cortos. Cuando el precio se mantiene por encima de ambas medias, la lectura habitual es de sesgo alcista; cuando se rompe por debajo, muchos analistas lo interpretan como un cambio de tendencia. Nada de esto es una recomendación de inversión, pero como ejercicio de pandas es impecable.

La gracia de hacer esto en un notebook, frente a un script suelto, es que puedes cambiar la semilla aleatoria o el periodo de las medias con una sola edición y reejecutar la celda para ver al instante cómo cambia el resultado. Esa iteración rápida es, en una frase, la razón de ser de Jupyter.
El pato robot de 400€ con el que Hugging Face quiere conquistar la Navidad
Problemas frecuentes y cómo resolverlos
Ninguna guía está completa sin la sección de tropiezos. Estos son los que te encontrarás con más probabilidad al combinar Jupyter y uv.
jupyter: command not foundal arrancar. Lo más probable es que escribierasjupyter lab. Con la instalación como tool, el ejecutable esjupyter-lab, con guion. Si tampoco funciona, revisa que el directorio de binarios de uv está en tu PATH.%pipresponde «No module named pip». Significa que instalaste JupyterLab sin el modificador--with pip. Puedes reinstalarlo conuv tool install --force jupyterlab --with pipy el problema desaparece.uv: command not foundjusto después de instalarlo. El instalador añade~/.local/bina tu PATH, pero la terminal abierta no lo ha recargado. Ejecutauv ensure-patho reinicia la shell.- El kernel Python 3 no aparece en el lanzador. Borra el entorno del tool y reinstálalo. La orden
uv tool install --force jupyterlab --with pipresuelve casi todos los casos de una instalación a medias. - El puerto 8888 ya está ocupado. Arranca el servidor en otro puerto con
jupyter-lab --port 8899o con--no-browsery pega el enlace con su token en el navegador. - En Fedora, uv se quedó en una versión vieja. Recuerda que con la instalación vía dnf la auto-actualización está desactivada; ejecuta
sudo dnf upgrade uv. - Un aviso sobre la caché de fuentes de matplotlib al arrancar. Es inofensivo. La primera ejecución construye la caché y no vuelve a molestar.
Si un notebook se queda colgado o el kernel se reinicia, no pierdas el trabajo: los cambios de las celdas de texto y código se guardan en el archivo .ipynb, y puedes reabrir el servidor y continuar donde lo dejaste.
Jupyter, un cuarto de siglo de computación interactiva
Cuando Fernando Pérez escribió aquellas 259 líneas en 2001, buscaba un intérprete de Python que no se sintiera como un juguete. Veinticinco años después, su proyecto es infraestructura invisible para la ciencia de datos, la investigación y buena parte del análisis financiero del planeta, y herramientas como uv lo hacen más accesible que nunca para cualquiera con un Linux delante.
La combinación que has montado en esta guía, un gestor moderno y un cuaderno interactivo con matplotlib, pandas y numpy, es la base sobre la que se apoya una parte enorme del trabajo analítico actual. Y el ecosistema no se detiene: en junio de 2026, JupyterLab 4.6 llegó con mejoras de accesibilidad, depurador y atajos de navegación, mientras el proyecto explora ya la generación de gráficos asistida y la integración con la IA generativa.
Si te quedas con algo de esta lectura, que sea esto: instalar Jupyter con uv toma menos de dos minutos, pero cambia por completo la forma de trabajar con datos. Guarda el notebook del segundo ejemplo, cambia la semilla o el periodo de las medias, y observa cómo un dato alterado propaga su efecto por todo el análisis. Esa inmediatez, imposible en un script tradicional, es exactamente lo que Jupyter lleva veinticinco años persiguiendo.
Windows en ARM escala a Tier 1: ¿qué significa para tu próximo portátil?

