Entorno: Python + uv + Jupyter en 10 minutos
¿Por qué Python necesita más configuración que R?
R tiene una instalación canónica: descargas el instalador, ejecutas, listo. Hay una versión de R activa y las bibliotecas se instalan globalmente o por usuario.
Python es distinto:
- Múltiples versiones coexisten. macOS y Linux vienen con Python preinstalado (a menudo desactualizado), y proyectos serios usan versiones específicas.
- Las dependencias dependen del proyecto. Una librería que un proyecto necesita en versión 1.0 puede no funcionar con otro que necesita 2.0.
- El ecosistema de instaladores está fragmentado:
pip,conda,pyenv,virtualenv,poetry,pipenv… cada uno con su filosofía.
El resultado: instalar Python “a lo bruto” lleva a “funciona en mi máquina pero no en la del compañero”, “esta semana actualicé algo y todo dejó de funcionar”, “¿qué Python estoy usando ahora?”.
La solución moderna se llama uv.
uv: el gestor moderno
uv es un gestor de Python escrito en Rust, lanzado en 2024 por la empresa Astral (los del linter ruff). Sustituye a pip, virtualenv, pyenv y poetry con una sola herramienta, 10-100× más rápida que las alternativas.
Lo que hace:
- Instala versiones de Python (como
pyenv). - Crea entornos virtuales aislados (como
virtualenv). - Instala dependencias (como
pip, pero con resolver mucho mejor). - Gestiona proyectos con
pyproject.toml(comopoetry). - Lockfile reproducible (
uv.lock), equivalente arenv.locken R.
En 2026 es el estándar emergente. Si vas a empezar Python hoy, empieza con uv.
Instalar uv
Windows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"macOS / Linux:
curl -LsSf https://astral.sh/uv/install.sh | shReinicia la terminal y prueba:
uv --versionSi responde con la versión, está listo.
Crear un proyecto
# Crea una carpeta nueva con estructura básica
uv init mi-proyecto
cd mi-proyectoEsto genera:
mi-proyecto/
├── .gitignore
├── .python-version # versión de Python fijada para el proyecto
├── README.md
├── pyproject.toml # metadata + dependencias
├── hello.py # ejemplo
└── uv.lock # se crea al añadir dependencias
Si necesitas una versión específica de Python:
uv python install 3.12 # descarga e instala Python 3.12
uv python pin 3.12 # fija esa versión para el proyectouv instala la versión exacta y la usa solo para este proyecto. No interfiere con el Python del sistema.
Instalar paquetes
uv add pandas numpy matplotlib seaborn jupyterEsto:
- Crea el entorno virtual (
.venv/) si no existe. - Instala los paquetes en ese entorno.
- Registra las dependencias en
pyproject.toml. - Actualiza
uv.lockcon las versiones exactas (reproducibilidad).
Para añadir una dependencia de desarrollo (linter, testing) sin meterla en producción:
uv add --dev pytest ruffPara sincronizar el entorno con uv.lock (al clonar el proyecto en otra máquina):
uv syncEquivalente conceptual a renv::restore() en R.
Jupyter en el proyecto
Jupyter es el equivalente de RStudio para Python (más o menos, la metáfora se rompe rápido, pero sirve para empezar). Notebook interactivo, ejecución por celdas, output inline.
Con uv instalado y jupyter añadido al proyecto:
uv run jupyter labuv run ejecuta el comando dentro del entorno virtual del proyecto. Sin él, jupyter lab usaría la instalación global de Python (si existe) y no encontraría los paquetes del proyecto.
Abre tu navegador en http://localhost:8888/lab y verás Jupyter Lab. Crea un nuevo notebook (kernel “Python 3”) y verifica:
import pandas as pd
print(pd.__version__)Debería imprimir la versión que uv instaló.
Editor: ¿solo Jupyter o algo más?
Tres opciones razonables:
- Jupyter Lab solo: suficiente para análisis exploratorio. La mayoría de analistas en Python viven aquí.
- VS Code + extensión Jupyter: integra notebooks dentro del IDE con autocompletado y debugger mejor que Jupyter Lab nativo. Recomendado si vienes de programación.
- PyCharm Professional: el equivalente robusto a RStudio. Excelente para desarrollo serio, gratis para estudiantes/open source, pagado para uso comercial.
Si vienes de RStudio, VS Code es probablemente lo más parecido en filosofía (IDE + chunks de código). Si vienes de Jupyter clásico, Jupyter Lab moderno es continuidad natural.
Para esta ruta, cualquier opción funciona, los ejemplos son código que pegas y ejecutas.
Estructura mínima del proyecto
mi-proyecto/
├── pyproject.toml # qué paquetes usa
├── uv.lock # versiones exactas (versionar en git)
├── .python-version # versión de Python
├── data/ # datos crudos (raros en git si son grandes)
│ └── ventas.csv
├── notebooks/ # análisis exploratorio
│ ├── 01_eda.ipynb
│ └── 02_modelo.ipynb
├── src/ # código reutilizable
│ ├── __init__.py
│ ├── limpieza.py
│ └── modelos.py
└── README.md
Convenciones que importan:
pyproject.tomlyuv.locken git: son la receta de tu entorno..venv/NUNCA en git: son binarios que se regeneran conuv sync.- Notebooks numerados: el número indica orden de ejecución (igual que los scripts R).
src/para código reutilizable: funciones que importan los notebooks. Convierte tu análisis exploratorio en biblioteca interna.
.gitignore razonable (uv init lo genera correcto por defecto):
.venv/
__pycache__/
*.pyc
.ipynb_checkpoints/
.python-version # opcional: ignorar si distintos devs usan distintas versiones
Trampas habituales
- Usar
pip installglobal sin entorno virtual. Instalar paquetes conpip install pandasdirecto desde la terminal los pone en el Python del sistema, contaminando entre proyectos. Si haces esto en macOS, además puedes romper herramientas del SO que dependen de su Python. Siempre dentro de un proyecto conuv add. jupyter labsinuv run. Sinuv run, Jupyter usa el Python global y no encuentra los paquetes del proyecto. El error es del estilo “ModuleNotFoundError: No module named pandas” incluso después de haberlo instalado. La solución esuv run jupyter lab.- Olvidar
uv syncal cambiar de máquina. Cuando clonas un proyecto en otro ordenador,uv syncrecrea el entorno desdeuv.lock. Sin él, los notebooks fallan al primer import. - Versiones de Python distintas entre desarrollo y producción. Si desarrollas con Python 3.12 y producción usa 3.10, algunas features pueden no estar disponibles. Pin la versión en
.python-versiony respétala.
En la siguiente entrega
Tienes el entorno. La siguiente pieza es NumPy, la librería fundamental sobre la que se monta todo el análisis numérico en Python, incluido pandas. Sin entender NumPy mínimamente, pandas se siente como magia. Lo siguiente.