Entorno: uv, git y el repo

Python · Lección 5

L4 Producción Fase F0 Sin libro — esto se aprende haciéndolo Prereqs Archivos y errores

La idea

Esta lección no tiene ejercicios en el navegador: se hace en la terminal de tu Mac. Es la única del módulo que es puramente operativa, y la que hace que todo lo demás sea reproducible.

Dos problemas que resuelve:

  1. “En mi máquina funcionaba.” Cada proyecto necesita sus propias versiones de librerías. uv las aísla y las fija.
  2. “Tenía una versión que servía y la perdí.” git guarda cada estado y te deja volver.

uv: entornos y dependencias

uv reemplaza a pip, virtualenv, pyenv y poetry a la vez, y es entre 10 y 100 veces más rápido. Ya lo tienes instalado.

# Dentro de la carpeta del repo
cd ~/"curso phyton en linea"/ruta780

# Inicializa el proyecto: crea pyproject.toml y .venv
uv init --no-readme --no-workspace

# Agrega las dependencias de la Fase 0-1
uv add numpy pandas matplotlib jupyter pytest

# Corre algo dentro del entorno, sin activarlo
uv run python -c "import numpy; print(numpy.__version__)"
uv run pytest scratch/
uv run jupyter lab
Comando Qué hace
uv add <paquete> Instala y lo anota en pyproject.toml
uv remove <paquete> Desinstala y lo quita
uv sync Reconstruye el entorno exacto desde uv.lock
uv run <comando> Ejecuta dentro del entorno, sin activar nada
Importantuv.lock se versiona, .venv no

uv.lock fija la versión exacta de cada dependencia, incluidas las indirectas. Ese archivo va al repo: es lo que hace que uv sync reproduzca tu entorno idéntico en otra máquina o en GitHub Actions. La carpeta .venv pesa cientos de megas y se regenera: va en .gitignore.

git: los siete comandos que usarás

git status                      # ¿qué cambió? — úsalo antes de todo
git add archivo.qmd             # marcar para el próximo commit
git add -A                      # marcar todo lo cambiado
git commit -m "mensaje"         # guardar el estado marcado
git push                        # subir a GitHub
git log --oneline -10           # ver los últimos 10 commits
git diff                        # ver qué cambió, línea por línea

El ciclo diario es siempre el mismo: git statusgit add -Agit commit -m "..."git push.

Mensajes de commit. Escribe qué cambió y por qué, no qué archivo tocaste. "actualizar archivo" no sirve dentro de seis meses; "lección 3: agregar ejercicio de dict comprehension" sí.

Conectar este repo a GitHub

Solo se hace una vez. En la terminal de tu Mac:

cd ~/"curso phyton en linea"/ruta780

git init
git branch -M main
git add -A
git commit -m "Ruta 780: plataforma inicial con las 6 lecciones de Fase 0"
git remote add origin https://github.com/dashboardlaboratory-cell/ruta780.git
git push -u origin main

Después de eso, GitHub Actions construye el sitio solo. En ~3 minutos queda en:

https://dashboardlaboratory-cell.github.io/ruta780/

De ahí en adelante, publicar un cambio son tres líneas:

git add -A
git commit -m "qué cambié"
git push
WarningLa regla que no se rompe

Ningún dato real de CBTL entra a este repositorio. Es público. Los proyectos usan datos públicos o sintéticos que imitan la estructura real. Si algo confidencial entra en un commit, borrarlo después no basta — queda en el historial y hay que reescribirlo con git filter-repo. Revisa con git status antes de cada git add -A.

Ver el sitio en local (opcional)

Si instalas Quarto, puedes previsualizar antes de publicar:

quarto add r-wasm/quarto-live   # solo la primera vez
python3 grafo/build_graph.py    # regenera el grafo
quarto preview                  # abre el navegador y recarga al guardar

No es obligatorio: GitHub construye igual. Sirve cuando estés iterando sobre una lección y no quieras esperar el ciclo de push.

Estructura del repo

ruta780/
├── _quarto.yml          configuración del sitio
├── index.qmd            dashboard
├── styles.css           tema
├── python/              este módulo
├── matematica/          álgebra lineal, cálculo (semana 3)
├── estadistica/         probabilidad e inferencia (semana 3)
├── ml/                  ISLP → ESL (semana 19)
├── causal/              inferencia causal (semana 61)
├── scratch/             TUS implementaciones en NumPy
├── proyectos/           TUS notebooks
├── grafo/               grafo de conocimiento
├── brain/               vault de Obsidian ← ábrelo como vault
└── .github/workflows/   build y deploy automático

Dos carpetas son tuyas: scratch/ y proyectos/. Ahí escribes tú. Y brain/ es tu vault: ábrelo en Obsidian con Open folder as vault apuntando a ruta780/brain.

Como el vault vive dentro del repo, cada git push lo respalda junto con todo lo demás. No hay sincronización que configurar.

Tarea de hoy

En orden, en la terminal:

  1. cd al repo y corre uv init --no-readme --no-workspace.
  2. uv add numpy pandas matplotlib jupyter pytest.
  3. Crea el repositorio ruta780 en GitHub (público, vacío, sin README).
  4. En Settings → Pages, pon Source: GitHub Actions.
  5. Corre los seis comandos de git initgit push -u origin main.
  6. Ve a la pestaña Actions del repo y mira el build. Cuando esté verde, abre tu sitio.
  7. Abre ruta780/brain como vault en Obsidian e instala: Spaced Repetition, Dataview, Templater.

Si el build falla, el log de Actions dice en qué paso. Pégamelo y lo arreglamos.

Para el Cerebro

¿Qué archivo de uv se versiona y cuál no?::uv.lock sí (fija versiones exactas); .venv no (se regenera)
¿Qué hace `uv run`?::Ejecuta un comando dentro del entorno del proyecto sin activarlo
¿Cuál es el ciclo diario de git?::status → add -A → commit -m → push
¿Qué debe decir un mensaje de commit?::Qué cambió y por qué, no qué archivo se tocó
¿Por qué borrar un dato confidencial en un commit posterior no basta?::Queda en el historial; hay que reescribirlo con git filter-repo
¿Dónde vive el vault de Obsidian?::En brain/, dentro del repo, para que git lo respalde sin sincronización aparte

Fuentes

Lo que esta página demuestra sola. Los comandos de esta lección se ejecutan en tu máquina, no en el navegador: compruébalos ahí.

Lo que viene de los libros.

  • Documentación oficial de uv y de git

Lo que es mío, no del libro. La secuencia concreta de comandos y la estructura de carpetas son mi recomendación, no doctrina de ninguna documentación.

Índices verificados el 11-09-2026 contra el índice publicado de cada libro.

→ Siguiente: NumPy: primer contacto