No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Implementación de Hooks en CookieCutter para Automatizar Proyectos

16/17
Recursos

¿Qué son los Hooks en CookieCutter?

En el ámbito del desarrollo de software, los Hooks son una funcionalidad extremadamente útil. En el caso de CookieCutter, permiten ejecutar scripts automáticamente antes o después de generar una estructura de proyecto. Este enfoque ayuda a automatizar tareas que, generalmente, deberían realizarse manualmente, como configurar entornos virtuales, validar nombres de proyectos, o instalar dependencias esenciales.

¿Qué tipos de Hooks existen?

  1. Pre-hooks:
    • Se ejecutan antes de generar el proyecto.
    • Son útiles para validar entradas del usuario o preparar ciertas configuraciones.
  2. Post-hooks:
    • Se ejecutan después de que el proyecto ha sido generado.
    • Facilitan configuraciones adicionales, como inicializar Git o instalar dependencias.

¿Cómo implementar Hooks en CookieCutter?

Implementar Hooks en CookieCutter es un proceso bastante sencillo y puede aumentar significativamente la productividad. Vamos a explorar cómo puedes hacerlo siguiendo unos pasos claros.

Creación y configuración de hooks

Para comenzar, debes crear una carpeta llamada hooks en la raíz del proyecto. Dentro de esta carpeta, define dos scripts:

  1. pre_gen_project.py - Este script se encarga de validaciones antes de la creación del proyecto.
  2. post_gen_project.py - Este script contiene acciones que se ejecutan después de la creación del proyecto.

Ejemplo de script pre-hook

import sys

# Obtener el nombre del proyecto
project_name = "{{ cookiecutter.project_name }}"

# Validar que el nombre del proyecto no esté vacío
if not project_name.strip():
    print("Error: El nombre del proyecto no puede estar vacío.")
    sys.exit(1)

Ejemplo de script post-hook

import os
import subprocess

# Variables
project_slug = "{{ cookiecutter.project_slug }}"

# Crear entorno virtual usando conda
subprocess.run(["conda", "create", "--name", project_slug, "python=3.8", "--yes"])

# Inicializar Git
subprocess.run(["git", "init", project_slug])

Probando la ejecución de Hooks

Para probar la ejecución de tus scripts pre y post-hook, puedes utilizar la terminal. Asegúrate de que tu entorno virtual esté activado antes de ejecutar el siguiente comando:

cookiecutter nombre_del_template

Al hacerlo, se activarán tanto el pre-hook para validar el nombre del proyecto previamente como el post-hook que automatiza la creación de un entorno conda y la inicialización de un repositorio Git.

¿Cómo pueden los Hooks mejorar la eficiencia?

Los Hooks en CookieCutter no solo agilizan procesos, sino que también aseguran la uniformidad y coherencia en la creación de proyectos. Esto es especialmente beneficioso en entornos profesionales donde se gestionan múltiples proyectos de forma simultánea. Por ejemplo, una empresa que maneja diferentes proyectos de data science puede automatizar la creación de entornos virtuales y la instalación de dependencias críticas como NumPy o Pandas, garantizando así que todos los proyectos sigan estándares comunes desde el inicio.

En resumen, la implementación de Hooks es una estrategia poderosa para incrementar la eficiencia y asegurar que todos los miembros del equipo sigan prácticas consistentes, manteniendo la calidad y organización de los proyectos.

Aportes 5

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

📝 Mis apuntes de la clase **Un hook es:** * Tipo de herramienta que amplia el funcionamiento de la librería `cookiecutter`. * Código que se ejecuta antes o después de generar la estructura del proyecto. * Automatiza tareas como: instalar dependencias, inicializar un repositorio de git, validar nombre del proyecto, etc. * Pueden ser escritos en Python o Shell. **Tipos de hooks** * **pre-hooks**: Se ejecutan antes de generar el proyecto y después de responder las preguntas, deben escribirse en un archivo llamado `pre_gen_project` * Ejemplo: Validar nombres de archivos y carpetas, o preparar una configuración. * **post-hooks**: Se ejecuta después de generar el proyecto. El script debe escribirse en un archivo llamado `post_gen_project` * Ejemplo: Inicializar un repositorio de git, crear un entorno virtual o instalar dependencias. 📌 **NOTA**: Con “las preguntas” se refiere a cuando `cookiecutter` nos pide por terminal los nombres de las variables que se necesitan para crear el template. **Implementación** * Crear la carpeta `hooks` dentro del directorio raíz. * Crear los archivos `pre_gen_project` y `post_gen_project` dentro de la carpeta `hooks`. Estructura del proyecto sería algo así: ```txt template_name/ ├── {{cookiecutter.project_name}}/ ├── hooks │ ├── pre_gen_project.py │ └── post_gen_project.py └── cookiecutter.json ```
Para ejecutar hooks en CookieCutter, efectivamente necesitas estar en la raíz del entorno, es decir, desactivar `notebooks_env` y activar el entorno base. Esto es necesario porque los hooks se ejecutan en el contexto del directorio donde se crea el proyecto, y si estás dentro de otro entorno, podría no encontrar los archivos requeridos. Es una buena práctica asegurarte de estar en el entorno correcto para evitar errores de ruta y de archivo.
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.
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.
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