Cómo hacer girar la estructura de un proyecto con Cookiecutter

Eres como yo, “procrastinación” bien podría ser tu segundo nombre. Siempre existe esa persistente vacilación antes de comenzar un nuevo proyecto. Sólo pensar en configurar la estructura del proyecto, crear documentación o escribir un archivo README decente es suficiente para provocar bostezos. Se siente como estar mirando una página en blanco de un temido ensayo escolar. ¿Pero recuerda lo fácil que se vuelve una vez que algún LLM útil (como ChatGPT) proporciona una plantilla inicial? La misma magia se puede aplicar a sus proyectos de codificación. Ahí es donde interviene Cookiecutter.

¿Qué es el cortador de galletas?

Cookiecutter es una herramienta de código abierto que te ayuda a crear plantillas de proyectos. Es independiente del lenguaje y funciona con prácticamente cualquier lenguaje de programación (o incluso con codificación externa, en caso de que necesite una estructura de carpetas y archivos estandarizada). Con Cookiecutter, puede configurar todos los archivos repetitivos (como README, Dockerfiles, directorios de proyectos o cualquier otra cosa) y luego generar rápidamente nuevos proyectos basados ​​en esa estructura.

El flujo de trabajo de Cookiecutter consta de tres pasos principales:

Tú defines la plantilla de tu proyecto. El usuario ingresa valores para las variables que usted especifica. Cookiecutter genera un nuevo proyecto, completando automáticamente archivos, carpetas y valores de variables según la entrada del usuario.

La siguiente imagen ilustra este proceso:

Flujo de trabajo del uso de una plantilla cookiecutter para “preparar” nuevos proyectos de acuerdo con la plantilla predefinida. imagen por autor

1. Configuración básica de la computadora

Necesita conocimientos mínimos de programación para instalar y utilizar Cookiecutter. Si puede abrir una ventana de línea de comando, estará listo.

• En Windows, escriba “cmd” en la barra de búsqueda y abra el “Símbolo del sistema”.

• Si aún no lo has hecho, instala pipx con:

pip instalar pipx

Pruebe su instalación ejecutando:

pipx –versión

Si recibe un error de “comando no encontrado”, agregue pipx a su RUTA. Primero, busque dónde se instaló pipx: python -m site –user-base.

Esto podría devolver algo como /home/nombredeusuario/.local. Busque la carpeta que contiene pipx.exe (en Windows) o pipx (en macOS o Linux). Si no tiene derechos de administrador, el directorio podría ser C:\Users\username\AppData\Roaming\Python\Pythonxxx\Scripts.

Tuve que agregar pipx a mi ruta y si no tienes derechos de administrador, deberás hacerlo cada vez que inicies una nueva ventana de terminal. Por lo tanto, se recomienda agregar la ubicación de forma permanente a la configuración de Variables de entorno. Sin embargo, si esta configuración está detrás de los privilegios de administrador, aún puede agregar

establecer RUTA=C:\Users\nombre de usuario\AppData\Roaming\Python\Pythonxxx\Scripts;%PATH%

O

establecer RUTA=/home/nombre de usuario/.local/bin;%PATH%

Con suerte, ahora obtendrá una respuesta significativa para pipx –version.

2. Instalación y configuración de Cookiecutter

Cookiecutter se distribuye como un paquete de Python, por lo que puedes instalarlo con pipx:

pipx instala el cortador de galletas

O simplemente ejecútelo sobre la marcha con:

pipx ejecutar cookiecutter…

Veamos cómo crear una plantilla de proyecto. En este ejemplo, configuraremos una plantilla para aplicaciones Streamlit (cookiecutter_streamlit_ml).

3. Creando la estructura de la plantilla

Dentro de su carpeta cookiecutter_streamlit_ml, necesita estos dos componentes clave:

• cookiecutter.json: un archivo JSON que define las variables que desea que los usuarios completen (nombre del proyecto, autor, versión de Python, etc.).

• {{ cookiecutter.directory_name }}: un nombre de carpeta de marcador de posición definido mediante llaves. Este directorio contendrá la estructura y los archivos de su proyecto. Cuando el usuario crea un nuevo proyecto a partir de su plantilla, Cookiecutter reemplazará este marcador de posición con el nombre que proporcionó. ¡Cuidado con mantener las llaves!

Contenido de ejemplo de una carpeta de plantilla de Cookiecutter. imagen por autor

Su cookiecutter.json podría verse así:

Ejemplo de archivo cookiecutter.json. imagen por autor

Primero, define variables en cookiecutter.json que se utilizan en todo el proyecto generado. Como mínimo, querrás una variable para el nombre del proyecto.

Por ejemplo, suelo hacer referencia a mi repositorio de GitHub en la documentación. En lugar de ingresarla repetidamente, configuro una variable una vez y dejo que Cookiecutter complete cada instancia automáticamente. De manera similar, no quiero escribir mi nombre en cada archivo Léame o documentación, así que lo configuro al principio.

Para evitar problemas con Docker y asegurarme de que se especifica la versión correcta de Python, solicito la versión de Python en la creación del proyecto, asegurándome de que se use en el Dockerfile generado.

Puede definir valores predeterminados para cada campo en cookiecutter.json. Cookiecutter reemplazará automáticamente cada instancia de {{ cookiecutter.variable }} en sus archivos de plantilla con la entrada del usuario. También puede utilizar transformaciones como lower() o replace(‘ ‘, ‘_’) para evitar problemas con los espacios en los nombres de los directorios.

En mi plantilla, prefiero proporcionar instrucciones detalladas a los usuarios en lugar de establecer valores predeterminados. Esto ayuda a guiar a aquellos que podrían omitir la lectura del archivo README y pasar directamente a la creación de proyectos.

4. Construyendo tu plantilla

Ahora comienza la parte divertida, es decir, definir tu plantilla. Lo está haciendo de una vez por todas, por lo que vale la pena dedicarle algo de tiempo, lo que reducirá drásticamente el tiempo de configuración de su proyecto a largo plazo.

Primero, cree la estructura de carpetas para su proyecto. Esto incluye la creación de todas las carpetas que espera utilizar en su proyecto. No te preocupes, lo que falte o resulte superfluo se puede editar en el propio proyecto. Por ahora, simplemente estás creando el plano; los silbatos y campanas serán específicos del proyecto.

Ejemplo de estructura de carpetas predefinida para proyectos futuros. Se crearán instancias de esta estructura de carpetas y de todos los archivos una vez que el usuario ejecute el comando cookiecutter. imagen por autor

Una vez que tenga sus carpetas listas, puede llenarlas con archivos. Estos pueden estar vacíos o incluso tener algún contenido que, de otro modo, podrías copiar y pegar constantemente desde otros documentos. En estos archivos, consulte las variables de cookiecutter siempre que sea necesario configurar algo dinámicamente (por ejemplo, el nombre del proyecto o el repositorio de GitHub). Cookiecutter reemplazará automáticamente esos marcadores de posición con entradas del usuario, que se solicitarán durante la configuración del proyecto. Esto le ahorra una gran cantidad de tedioso trabajo de copiar y pegar, especialmente en sus archivos de documentación.

Parte del contenido del archivo Léame, del que se creará una instancia cuando “descomprima” su plantilla de cortador de galletas en el proyecto. En el proyecto derivado, los campos {{ cookiecutter. }} se completará con los valores proporcionados durante el “unboxing”. imagen por autor

Por último, deposite toda la carpeta cookiecutter_py_streamlit en su cuenta de GitHub, comprímala o déjela como está. De cualquier manera, ahora puedes…

5. Usa tu plantilla

Una vez que su plantilla esté lista, crear un nuevo proyecto se convierte en muy fácil:

1. Abra su terminal y navegue hasta donde desea crear el proyecto.

2. Ejecute uno de los siguientes comandos:

• De GitHub:

pipx ejecuta cookiecutter gh:ElenJ/cookiecutter_streamlit_ml (reemplace con su repositorio)

• Desde una carpeta local:

pipx ejecuta cookiecutter /ruta/a/template_folder

• Desde un zip:

pipx ejecuta cookiecutter /ruta/a/template.zip

3. Cookiecutter le hará las preguntas definidas en cookiecutter.json. Proporcione respuestas, o simplemente presione Intro si ha establecido valores predeterminados.

Se le pide que proporcione respuestas a las preguntas que definió en la plantilla de cookiecutter. Las respuestas que proporcione se utilizarán como las variables respectivas en los campos definidos por {{ cookiecutter.variable }}. imagen por autor

4. Voilà 🎉 se genera su nueva carpeta de proyecto, completa con carpetas, archivos y referencias personalizadas según sus entradas.

Léame instanciado con variables que el usuario proporcionó durante la configuración. imagen por autor

Puede sincronizar su nuevo proyecto con GitHub empujándolo directamente desde la funcionalidad Git incorporada de su IDE o creando un nuevo repositorio en GitHub (asegurándose de que esté vacío y no incluya un archivo Léame) y luego moviendo allí la carpeta del proyecto generado.

¡Y eso es todo! Ha convertido lo que solía ser una tarea de un día en un proceso rápido y ha generado instantáneamente muchos archivos esperando ser completados con sus ideas. Al mirar el nuevo proyecto, definitivamente deberías tener la sensación de haber tenido un día productivo. Si todavía buscas orientación sobre las mejores prácticas, consulta las plantillas oficiales de Cookiecutter aquí.

Y como siempre: ¡Feliz codificación!