Entorno: uv, git y el repo
Python · Lección 5
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:
- “En mi máquina funcionaba.” Cada proyecto necesita sus propias versiones de librerías.
uvlas aísla y las fija. - “Tenía una versión que servía y la perdí.”
gitguarda 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 |
uv.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íneaEl ciclo diario es siempre el mismo: git status → git add -A → git 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 mainDespué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 pushNingú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 guardarNo 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:
cdal repo y correuv init --no-readme --no-workspace.uv add numpy pandas matplotlib jupyter pytest.- Crea el repositorio
ruta780en GitHub (público, vacío, sin README). - En Settings → Pages, pon Source: GitHub Actions.
- Corre los seis comandos de
git init…git push -u origin main. - Ve a la pestaña Actions del repo y mira el build. Cuando esté verde, abre tu sitio.
- Abre
ruta780/braincomo 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.
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