Daniel Andres Rojas Paredes
como soy nuevo en dasta sciense me cuesta imaginarme un escenario como el que se menciona al final de la clase, donde un template deba ser inicializado relativamente seguido. podrian darme un ejemplo mas real.
Automatizar tareas repetitivas al crear proyectos de data science marca una diferencia enorme en la productividad de cualquier equipo. Los hooks en Cookie Cutter permiten ejecutar scripts justo antes o después de generar una plantilla, eliminando pasos manuales como validar nombres, crear entornos virtuales o inicializar repositorios de Git. A continuación se explica cómo funcionan y cómo implementarlos paso a paso.
¿Qué son los hooks y qué tipos existen en Cookie Cutter?
Los hooks son scripts en Python que se ejecutan de forma automática durante el proceso de generación de un proyecto con Cookie Cutter. Su propósito es automatizar configuraciones que normalmente se harían de forma manual, lo que garantiza consistencia entre proyectos.
Existen dos tipos principales [0:22]:
pre_gen_project.py): se ejecuta antes de generar el proyecto. Es útil para validar la entrada del usuario o preparar configuraciones previas.post_gen_project.py): se ejecuta después de generar el proyecto. Sirve para automatizar tareas como inicializar Git, crear entornos virtuales o instalar dependencias.Ambos archivos deben ubicarse dentro de una carpeta llamada hooks en la raíz de la plantilla, al mismo nivel que el archivo cookiecutter.json y el directorio del proyecto [1:18].
¿Cómo se implementa un pre-hook para validar el nombre del proyecto?
El pre-hook permite verificar que el usuario haya ingresado un nombre válido antes de que Cookie Cutter genere la estructura [1:40]. El script importa sys y recibe el nombre del proyecto directamente desde la variable {{ cookiecutter.project_name }}.
python import sys
project_name = '{{ cookiecutter.project_name }}'
if ' ' in project_name: print(f"ERROR: '{project_name}' no es un nombre válido. No uses espacios.") sys.exit(1)
Si el nombre contiene espacios, el script lanza un error y detiene la generación. La persona tendría que volver a ejecutar el comando con un nombre correcto.
¿Qué tareas automatiza el post-hook?
El post-hook se encarga de las configuraciones posteriores a la creación del proyecto [2:20]. En el ejemplo práctico se implementan dos tareas clave:
environment.yml, que define las dependencias y sus versiones específicas.El script también incluye una interacción con el usuario: pregunta si desea crear el entorno virtual de Conda automáticamente, ofreciendo las opciones Y (sí) o N (no) [2:55].
¿Cómo se configura el archivo environment.yml con versiones específicas?
Dentro del archivo environment.yml se listan las dependencias del proyecto. Para agregar mayor control, se especifican versiones concretas de cada paquete [2:30]:
yaml name: '{{ cookiecutter.project_name }}' dependencies:
Esto asegura que todos los miembros del equipo trabajen con las mismas versiones, evitando problemas de compatibilidad.
¿Cómo se ejecutan y verifican los hooks en la terminal?
Para probar los hooks, se ejecuta Cookie Cutter desde la terminal apuntando a la plantilla [3:10]:
bash cookiecutter my_ml_template
Durante la ejecución, Cookie Cutter solicita los datos habituales (nombre del proyecto, versión de Python, licencia) y luego el post-hook pregunta si se desea crear el entorno virtual [3:30]. Al confirmar, se ejecuta automáticamente el proceso equivalente a conda create, instalando todas las dependencias definidas.
Para verificar que el entorno fue creado correctamente [4:00]:
bash conda env list conda activate new_project_hooks python
import seaborn import pandas
Ambos paquetes se importan sin errores, confirmando que las dependencias se instalaron correctamente durante la generación del proyecto.
El nombre del entorno virtual coincide con el nombre del proyecto, lo que facilita la identificación cuando se manejan múltiples proyectos en paralelo [4:20].
En entornos profesionales, esta automatización es especialmente valiosa. Equipos que gestionan múltiples proyectos de data science pueden estandarizar la creación de entornos, la instalación de dependencias críticas como NumPy o Pandas, y la configuración de Git desde el inicio [5:00]. Cada nuevo proyecto sigue las mismas prácticas y configuraciones, lo que mejora la consistencia y productividad del equipo.
¿Ya utilizas hooks en tus plantillas de Cookie Cutter? Comparte en los comentarios qué tareas automatizas en tus proyectos.
Daniel Andres Rojas Paredes
como soy nuevo en dasta sciense me cuesta imaginarme un escenario como el que se menciona al final de la clase, donde un template deba ser inicializado relativamente seguido. podrian darme un ejemplo mas real.
Jhon Alexander Mosquera Vanegas
Los hooks de Cookiecutter transforman una recomendación en un paso que ocurre solo. En la clase, el script posterior a la generación pregunta si se quiere crear un entorno de conda con environment.yaml, y el proyecto nuevo aparece con su entorno listo sin que nadie tenga que acordarse de crearlo. Además, el script previo puede frenar un nombre de proyecto vacío antes de generar nada. Esto importa en equipos de análisis, porque una buena práctica que depende de la memoria de cada persona termina aplicándose a medias, mientras que una incluida en la plantilla tiende a aplicarse siempre.
Mercedes Jue
Critica constructiva hasta ahora en la mayoria de los cursos de Carli, empieza siempre con mucha paciencia y explicando super claro, se va acelerando y en la ultima clase se tratan temas muy complejos a las apuradas! Solamente ese detalle, el resto excelente
Christopher Flores
¿Porque no ejecuta el cookiecutter en base, sino en otro entorno virtual?
Mario Alexander Vargas Celis
La implementación de hooks en Cookiecutter es una funcionalidad poderosa para automatizar tareas antes o después de generar un proyecto. Aquí te explico cómo se hace, con un ejemplo completo para que puedas usarlo en tus plantillas de ciencia de datos o machine learning.
🧠 ¿Qué son los hooks en Cookiecutter?
Son scripts que Cookiecutter ejecuta automáticamente:
pre_gen_project.py: antes de generar el proyecto.post_gen_project.py: después de generar el proyecto.📁 Estructura de una plantilla con hooks
cookiecutter-ml-template/ ├── cookiecutter.json ├── hooks/ │ ├── pre_gen_project.py │ └── post_gen_project.py └── {{ cookiecutter.project_slug }}/ └── ...
🧪 Ejemplo: Automatizar entorno Conda tras generar el proyecto
1. cookiecutter.json
{ "project_name": "My ML Project", "project_slug": "my_ml_project", "author_name": "Lucumi", "python_version": "3.10", "license": ["MIT", "GPL", "Apache"] }
2. hooks/post_gen_project.py
Este hook, al terminar de crear el proyecto, genera el entorno Conda automáticamente si tienes conda instalado:
import os import subprocess import sys
project_dir = os.path.realpath(os.path.curdir) env_name = "{{ cookiecutter.project_slug }}"
print(f"🔧 Creando entorno Conda: {env_name}")
try: subprocess.run(["conda", "create", "--yes", "--name", env_name, "python={{ cookiecutter.python_version }}"], check=True) print(f"✅ Entorno '{env_name}' creado correctamente.") except subprocess.CalledProcessError: print("❌ Error al crear el entorno Conda.") sys.exit(1)
3. Opcional: hooks/pre_gen_project.py
Este hook valida antes de generar. Por ejemplo:
import sys project_name = "{{ cookiecutter.project_name }}"
if " " in project_name: print("❌ El nombre del proyecto no debe contener espacios.") sys.exit(1)
🚀 ¿Qué más puedes automatizar con hooks?
pip, conda, poetry).env, .gitignore, etc.black, pre-commit, linters o tests iniciales📌 Buenas prácticas
sys.exit(1) en hooks si algo falla.Francisco Cisneros
El directorio hooks debe estar ubicado dentro del directorio de la plantilla que estás utilizando, que en este caso sería my_ml_template. Asegúrate de crear el directorio hooks en la raíz de la plantilla, junto con otros archivos como project_name y el archivo JSON. Esto permitirá que Cookiecutter pueda ejecutar los scripts correspondientes antes y después de la creación del proyecto.