VS Code¶
Visual Studio Code (VS Code) es el editor que usamos en los dos módulos. En
él escribirás Python, abrirás cuadernos marimo, revisarás cambios de Git y
usarás la terminal para ejecutar uv, marimo y otros comandos.
VS Code no es el intérprete de Python ni el gestor de dependencias. Para evitar confusiones, piensa en cuatro piezas:
| Pieza | Responsabilidad |
|---|---|
| VS Code | Editar archivos, navegar por el código y depurar |
| Extensiones | Añadir soporte para Python, Pylance, marimo o Ruff |
| Intérprete | Ejecutar el código, normalmente el Python de .venv |
| Terminal | Ejecutar uv, git y comandos reproducibles del proyecto |
Qué aprenderás¶
Al terminar esta guía podrás:
- abrir la carpeta completa de un proyecto y reconocer su workspace;
- comprobar el intérprete que VS Code ha detectado y distinguirlo del Python global;
- preparar el entorno con
uvsolo cuando falten el entorno virtual o sus dependencias; - ejecutar y depurar un script desde VS Code;
- usar la terminal, la paleta y las extensiones sin mezclar sus funciones;
- comprobar que VS Code, marimo y
uvtrabajan con el mismo entorno.
Instalar VS Code y las extensiones¶
Descarga Visual Studio Code desde
code.visualstudio.com. Después abre la vista
de extensiones (Ctrl+Shift+X en Windows/Linux; Cmd+Shift+X en macOS) e
instala:
| Extensión | Para qué la usamos |
|---|---|
Python, de Microsoft (ms-python.python) |
Ejecutar, depurar y detectar intérpretes |
Pylance, de Microsoft (ms-python.vscode-pylance) |
Autocompletado, navegación y análisis del código |
| marimo, de marimo-team | Abrir y ejecutar cuadernos marimo dentro del editor |
| Ruff, opcional | Diagnósticos y formato rápido para Python |
La extensión de Python puede mostrar herramientas para descubrir entornos. En
este curso uv sigue siendo la fuente de verdad: añade paquetes con uv add y
sincroniza con uv sync, no los instales desde una interfaz que deje el
pyproject.toml sin actualizar.
En la nube con Codespaces (opcional)
GitHub Codespaces ofrece un VS Code completo en el navegador sobre una máquina remota. Es una alternativa, no un paso obligatorio: si ya tienes VS Code y Python funcionando en tu equipo, no necesitas nada de esto. Se menciona para que la reconozcas si la ves en la interfaz de GitHub, y para quien prefiera no instalar nada por su cuenta.
Si decides usarlo, el flujo es: entra en el repositorio de GitHub, pulsa
Code -> Codespaces, y sincroniza las dependencias al abrirlo con
uv sync — la máquina remota llega vacía. A partir de ahí, el proyecto se
trabaja igual que en local: los comandos de Git y el resto del temario no
cambian. El equipo comparte versiones mediante pyproject.toml, uv.lock
y .python-version.
En qué se diferencia de trabajar en local:
| VS Code local | Codespaces | |
|---|---|---|
| Qué instalas | VS Code, uv y Git (uv descarga Python y las dependencias) |
Nada: todo está en la máquina remota |
| Coste | Gratuito | Incluye una cuota mensual gratuita de horas; si la superas, GitHub cobra por uso |
| Para quién compensa | Uso diario | Pruebas puntuales o equipos sin permisos de instalación |
Abrir un proyecto completo¶
VS Code llama workspace a la carpeta que tienes abierta. Abre la carpeta
entera, no un archivo suelto: así el editor puede localizar pyproject.toml,
.venv, imports, cuadernos y ajustes del proyecto.
Desde una terminal:
Efecto observable: VS Code abre mi_proyecto como carpeta raíz y el nombre
del proyecto aparece en el explorador. Si code no está disponible, usa
Archivo -> Abrir carpeta. En macOS puedes instalar el comando desde la
paleta con Shell Command: Install 'code' command in PATH.
Una vez abierta la carpeta, crea una terminal nueva desde Terminal -> Nueva terminal. Comprueba que estás en el lugar correcto:
En Windows PowerShell, usa Get-ChildItem pyproject.toml para la segunda línea.
Si el archivo no aparece, corrige la carpeta antes de ejecutar comandos del
proyecto.
Preparar el intérprete del proyecto¶
No siempre necesitas ejecutar uv sync. Un proyecto nuevo creado con uv init
y uv add puede tener ya creado .venv, el lockfile y sus dependencias. En ese
caso, comprueba el entorno y continúa. Usa esta tabla para decidir:
| Situación | Acción |
|---|---|
Proyecto nuevo creado con uv init y dependencias añadidas con uv add |
No repitas uv sync; comprueba el entorno con uv run |
Repositorio clonado con uv.lock y .venv ausente o incompleto |
Ejecuta uv sync --locked |
Proyecto con pyproject.toml pero todavía sin uv.lock |
Ejecuta uv sync para resolver las dependencias |
| Dependencias modificadas o entorno desactualizado | Ejecuta uv sync; usa --locked si el lockfile debe mantenerse sin cambios |
Si trabajas con el repositorio del curso y el entorno falta o está incompleto, el comando reproducible es:
uv sync sincroniza el entorno virtual .venv con las dependencias declaradas
en pyproject.toml. Si hace falta, crea .venv, resuelve versiones e instala
los paquetes. Por eso se utiliza cuando el entorno o sus dependencias faltan o
han cambiado; no es una orden que tengas que repetir antes de cada ejecución.
El parámetro --locked cambia esa decisión: exige que exista uv.lock y que
coincida con pyproject.toml. Instala la resolución ya registrada y falla si
necesita modificarla. Así evita que un repositorio clonado termine usando
versiones distintas sin que se revise el cambio. Para un proyecto nuevo que aún
no tiene uv.lock, no uses --locked: ejecuta primero uv sync o, normalmente,
uv add, que crea y actualiza el lockfile.
Después comprueba el entorno:
Salida esperada en el entorno actual del curso:
Las versiones concretas dependen del lockfile. La primera línea se obtiene con el intérprete del proyecto y la segunda con el marimo declarado en él.
Una vez preparado el entorno, la extensión de Python suele detectar
automáticamente el entorno virtual .venv. Comprueba el intérprete que aparece
en la barra de estado o en la paleta de Python. Si muestra el .venv del
proyecto, no necesitas ejecutar ninguna acción adicional.
La selección manual es opcional y solo hace falta si VS Code no detecta el
entorno o muestra otro Python. En ese caso, abre la paleta (Ctrl+Shift+P en
Windows/Linux; Cmd+Shift+P en macOS), ejecuta Python: Select Interpreter y
elige el entorno virtual del proyecto:
- Linux y macOS:
.venv/bin/python; - Windows:
.venv\Scripts\python.exe.
El intérprete que usa VS Code aparece en la barra de estado. Si .venv no aparece,
comprueba que has abierto la carpeta raíz y que el entorno está preparado. Si
faltan el entorno o las dependencias, ejecuta uv sync --locked cuando exista
uv.lock o uv sync si todavía no existe; después recarga la ventana o
selecciona manualmente el entorno.
Tres intérpretes que conviene no confundir
- El Python global pertenece al sistema y puede no tener las librerías del proyecto.
- El Python seleccionado por VS Code/Pylance analiza imports y se usa al ejecutar o depurar desde el editor.
- El Python de
uv runpertenece al proyecto y es la referencia más segura para comandos reproducibles.
Los dos últimos deben apuntar al mismo .venv. Cambiar el intérprete no
modifica pyproject.toml ni instala dependencias.
La terminal integrada¶
La terminal integrada es una terminal normal situada dentro de VS Code. Es el
lugar recomendado para comandos de proyecto. No repitas uv sync en cada
sesión; úsalo después de clonar, cambiar dependencias o detectar que falta el
entorno:
Para scripts y herramientas, prefiere uv run: evita ejecutar el archivo con
un Python distinto del que Pylance está analizando. Activar .venv puede ser
cómodo para una sesión, pero no sustituye a declarar dependencias con uv.
Si cambias el intérprete mientras ya hay una terminal abierta, la terminal
puede conservar el PATH anterior. Cierra esa terminal y crea otra antes de
diagnosticar un ModuleNotFoundError.
La paleta de comandos¶
Ctrl+Shift+P (Cmd+Shift+P en macOS) abre la paleta. Escribe una acción en vez
de buscarla por los menús:
| Acción | Uso |
|---|---|
Python: Select Interpreter |
Elegir el Python de .venv |
Python: Run Python File in Terminal |
Ejecutar el script abierto |
Python: Create Environment |
Crear un entorno desde VS Code; en este curso preferimos uv |
Developer: Reload Window |
Recargar extensiones y detección del workspace |
Marimo: New Marimo Notebook |
Crear un cuaderno marimo, si la extensión lo ofrece |
Marimo: Open as Marimo Notebook |
Abrir un .py en la vista de cuaderno |
Los nombres pueden aparecer en inglés aunque el idioma de VS Code esté en
español. Buscar Python o marimo suele encontrar la acción correcta.
Editar, ejecutar y depurar Python¶
Crea un archivo ejemplo.py con este contenido:
Para ejecutar, pulsa el botón de reproducción del editor o usa Python: Run Python File in Terminal.
Salida esperada:
Depurar significa ejecutar el programa pausándolo en los puntos que elijas, para observar cuánto valen las variables en ese momento. Para depurar:
- Haz clic en el margen izquierdo junto a
return numero * 2para crear un punto de interrupción (aparece un punto rojo). - Pulsa
F5o elige Run and Debug. Si VS Code pregunta qué configuración usar, elige Python Debugger y después Python File. - Cuando la ejecución se detenga, observa
numeroen Variables o en la consola de depuración. - Usa continuar, paso siguiente y detener para recorrer el programa.
Un punto de interrupción no cambia el código: pausa la ejecución para observar
su estado. Si el botón ejecuta otro archivo o aparece otro Python, comprueba el
workspace y el intérprete seleccionado; para una prueba independiente usa
uv run python ejemplo.py.
Ajustes del editor¶
VS Code distingue dos niveles de configuración:
- Usuario: se aplica a todos tus proyectos y se abre con Preferences: Open User Settings (JSON).
- Workspace: solo afecta a la carpeta abierta y se guarda en
.vscode/settings.json; se puede compartir si no contiene rutas personales ni secretos.
La configuración del workspace gana cuando entra en conflicto con la del usuario. Un ajuste útil para guardar automáticamente con un pequeño retardo es:
Actívalo desde Archivo -> Autoguardado o desde los ajustes. El idioma, el
tema y el tamaño de letra son preferencias personales; no es necesario
versionarlos para que el proyecto funcione. Para previsualizar Markdown usa
Ctrl+Shift+V (Cmd+Shift+V en macOS).
Extensiones y herramientas del proyecto¶
Una extensión mejora la experiencia del editor, pero no siempre forma parte
del entorno reproducible. Por ejemplo, la extensión de Ruff puede mostrar
diagnósticos aunque ruff no esté en pyproject.toml. Si todo el equipo
debe usarlo, o si se ejecuta en comprobaciones automáticas, decláralo y
ejecútalo con uv:
Del mismo modo, abrir un cuaderno requiere la extensión de marimo, pero sus
dependencias Python se gestionan con uv. Consulta Cuadernos marimo
para el flujo de celdas y kernels, y Git y GitHub para la vista
de control de código fuente.
Source Control desde VS Code¶
La vista Source Control ofrece el flujo visual de Git:
- Revisa los archivos modificados en Changes.
- Pulsa
+para preparar un archivo o elige preparar todos. - Revisa el diff preparado.
- Escribe el mensaje y pulsa Commit.
- Usa Sync Changes para traer y publicar cambios cuando la rama esté configurada.
Es el mismo ciclo que git status, git add, git commit, git pull y
git push. Si una acción visual no está clara, abre la terminal y comprueba el
estado con los comandos de Git y GitHub.
Problemas habituales¶
| Síntoma | Causa probable | Solución inicial |
|---|---|---|
| Pylance marca imports como inexistentes | Está seleccionado otro Python o falta una dependencia | Comprueba primero el entorno detectado; selecciona .venv manualmente solo si hace falta y sincroniza con uv sync --locked si existe uv.lock |
uv dice que no encuentra pyproject.toml |
La terminal o el workspace están en otra carpeta | Abre la carpeta raíz y comprueba pwd |
| El botón de ejecutar usa otro Python | La configuración del editor y la terminal no coinciden | Comprueba el intérprete detectado; selecciona .venv manualmente si no es correcto y verifica con uv run python --version |
| El kernel de marimo no aparece | Falta .venv, la extensión o la detección del entorno |
Si falta .venv, ejecuta uv sync --locked con lockfile o uv sync sin él; comprueba la extensión y recarga el workspace |
| La terminal conserva un entorno antiguo | Se abrió antes de cambiar el intérprete | Cierra la terminal y crea una nueva |
code . no existe |
El comando de VS Code no está en el PATH |
Abre la carpeta desde el menú o instala el comando en el PATH |
| Los cambios de Git no aparecen | El archivo está ignorado o no se abrió la raíz correcta | Comprueba git status y .gitignore |
Comprobación final¶
Desde la terminal integrada y con la carpeta del proyecto abierta, ejecuta:
uv run python -c "import sys; print(sys.executable)"
uv run python -c "import pandas; print(pandas.__version__)"
git status --short
Salida esperada: la ruta del ejecutable contiene .venv, se muestra una
versión de pandas y Git devuelve el estado de la carpeta sin errores. En el
proyecto actual el ejecutable está en .venv/bin/python y pandas es 3.0.5;
la ruta y la versión pueden variar según el sistema y el lockfile.
Siguiente paso¶
Sigue con los cuadernos marimo.