Bienvenido a la plantilla oficial ClearNote Py DA, un entorno ligero, reproducible y altamente portable para desarrollo de análisis de datos con Python y MS SQL Server dentro de contenedores usando Visual Studio Code + Dev Containers + Docker + uv.
.
├── data/ # Directorio para datos
│ ├── other/ # Datos de entrada sin procesar en formatos distintos a SQL
│ ├── sql/ # Consultas y utilidades SQL
├── notebooks/ # Jupyter notebooks
│ └── Notebook.py # Notebook principal en formato .py
├── output/ # Datos procesados y resultados
├── scripts/
│ └── run_pipeline.py # Script para ejecutar el pipeline completo
├── src/ # Código fuente del proyecto
│ ├── config/ # Configuraciones
│ ├── pipelines/ # Pipelines de datos
│ └── utils/ # Funciones auxiliares
└── requirements.txt # Dependencias del proyecto (Etapa 1)
Esta plantilla está diseñada para:
- Ejecutar proyectos de ciencia de datos sin instalar nada en tu sistema anfitrión
- Trabajar con MS SQL Server y Python de forma integrada
- Usar
.pyy.ipynbde forma interactiva con Jupyter Interactive Window - Mantener una estructura organizada para proyectos de análisis de datos
- Gestionar dependencias con uv, un gestor moderno y rápido para proyectos Python
- Facilitar la transición desde un flujo clásico con
requirements.txthacia uno más moderno conpyproject.toml+uv.lock - Trabajar en carpetas sincronizadas (como OneDrive) sin conflictos de permisos
- Imagen base:
python:3.14.5-slim-bookworm - Paquetes del sistema:
build-essentialca-certificatescurlgcc,g++gnupgunixodbc-devmsodbcsql17,mssql-tools
- Gestor de paquetes/proyectos:
uv - Versión fijada:
0.11.13 - Instalación de uv: copiado desde la imagen oficial de Astral
- Entorno virtual del proyecto:
.venv/
- Editor principal: Visual Studio Code
- Extensiones preconfiguradas:
- Python
- Pylance
- Ruff
- Jupyter
- Better TOML
- GitHub Copilot
- Path Intellisense
- Material Icon Theme
La plantilla apunta automáticamente al intérprete dentro del entorno virtual:
${workspaceFolder}/.venv/bin/pythonCuando el contenedor se crea por primera vez, el postCreateCommand detecta automáticamente el tipo de proyecto y actúa en consecuencia:
- Si también existe
uv.lock:- ejecuta
uv sync --locked
- ejecuta
- Si no existe
uv.lock:- ejecuta
uv lock && uv sync
- ejecuta
- ejecuta
uv init --no-package --no-workspace . - elimina el archivo
main.pygenerado por defecto - importa dependencias desde
requirements.txtcon:uv add -r requirements.txt
- el proceso falla y muestra un mensaje indicando que falta
pyproject.tomlorequirements.txt
Esta plantilla adopta un enfoque de transición en dos etapas:
Ideal para proyectos existentes que todavía no migran por completo a pyproject.toml.
Permite:
- seguir usando la estructura tradicional
- empezar a trabajar con
uv - crear la base para migrar a lockfiles reproducibles
Recomendada para nuevos proyectos o para consolidar entornos reproducibles.
Ventajas:
- mejor manejo de dependencias
- lockfile reproducible
- flujo más moderno y mantenible
- integración más natural con tooling actual de Python
cd tu_ruta/
git clone https://github.com/ClearNote97/ClearNote_Py_DA_MSSQLServer.git
cd ClearNote_Py_DA_MSSQLServerSi quieres usar esta plantilla como base para un proyecto nuevo:
rm -rf .gitLuego renombra la carpeta:
cd ..
mv ClearNote_Py_DA_MSSQLServer nuevo_nombre
cd nuevo_nombreInicializa tu nuevo repositorio:
git init
git add .
git commit -m "Proyecto inicial basado en plantilla ClearNote Py DA con Conexión a MS SQL Server"Y conecta tu propio repositorio si lo deseas:
git remote add origin https://github.com/tu_usuario/tu_repositorio.git
git push -u origin mainCuando VS Code detecte la configuración, selecciona:
Reopen in Container
Durante la creación del contenedor, la plantilla:
- instala
uv - detecta si trabajas con
pyproject.tomlorequirements.txt - prepara el entorno virtual
.venv - instala o sincroniza dependencias
No necesitas correr pip install manualmente.
| Tarea | Disponible ✅ |
|---|---|
Ejecutar scripts .py |
✅ |
Usar notebooks .ipynb |
✅ |
| Ejecutar código por bloques | ✅ |
| Consultas SQL interactivas | ✅ |
| Conexión a MS SQL Server | ✅ |
| Pipelines de datos automatizados | ✅ |
| Formatear código automáticamente con Ruff | ✅ |
| Organizar imports | ✅ |
| Hacer análisis reproducibles | ✅ |
| Depurar scripts con breakpoints | ✅ |
Gestionar dependencias con uv |
✅ |
| Trabajar dentro de contenedor aislado | ✅ |
| Usar Git y control de versiones | ✅ |
main_pipeline.py: Orquesta el flujo completo de procesamiento de datos
main_query.sql: Consultas SQL principalessql_utils.py: Funciones auxiliares para interactuar con SQL Server
- Módulos para limpieza, transformación y exportación de datos
- Funciones reutilizables para manipulación de datasets
- Herramientas para estandarización y formateo de variables
uv reemplaza el uso tradicional de pip como comando principal del flujo de trabajo.
- mayor velocidad
- manejo moderno de dependencias
- lockfiles reproducibles
- integración con proyectos Python actuales
- mejor experiencia dentro de contenedores reproducibles
Aunque la imagen base de Python pueda traer pip instalado internamente, esta plantilla no lo usa como herramienta de trabajo. Toda la gestión del entorno y dependencias se realiza con uv.
README.md.devcontainer/devcontainer.json.devcontainer/Dockerfilerequirements.txtopyproject.tomluv.lockcuando exista
.venv/__pycache__/*.pyc.env
Un .gitignore mínimo recomendado sería:
.env
__pycache__/
*.pyc
.venv/- Configura las credenciales de SQL Server en
.env - Utiliza las funciones predefinidas en
src/utils/para operaciones comunes - Si usas notebooks o ejecución interactiva, valida que
ipykernelesté incluido en tus dependencias
- Coloca tus datos de entrada en
data/other/odata/sql/ - Ajusta las consultas SQL en
data/sql/main_query.sql - Configura los parámetros en
src/config/config.py - Ejecuta el pipeline completo con
python scripts/run_pipeline.py
- Mantén las consultas SQL en archivos
.sqlseparados - Documenta las transformaciones de datos en los notebooks
- Utiliza el control de versiones para los cambios en el código
- Mantén los datos sensibles fuera del repositorio
- Si ya migraste a
uv.lock, consérvalo en el repositorio
Distribuido bajo la licencia MIT. Puedes copiar, modificar y reutilizar libremente esta plantilla.
MSc. Nicolás Enrique Valencia Santiago
Este README.md está pensado como base y debe adaptarse según el tipo de proyecto que se construya a partir de esta plantilla.