Creación de Plantillas Personalizadas con Cookie Cutter
Resumen
Estructura inicial de la plantilla
Dentro de la carpeta principal crea la carpeta que contendrá todo lo que necesitarás en tu proyecto con el nombre:
{{ coockiecutter.project.slug}}
En la carpeta recién creada agrega los siguientes archivos:
README.mdenvironment.ymlcoockiecutter.json
También crea las carpetas que necesitará tu proyecto:
/data
/notebooks
Afuera de la carpeta, pero dentro de la carpeta principal, crea el siguiente archivo:
environment.yml
Hay dos archivos environment.yml, el de configuración de entorno (dentro de la carpeta que creaste) y el que configura las dependencias y paquetes (en la carpeta principal).
Información de README.md
Adentro del archivo README.md agrega las siguientes líneas que lo harán un archivo dinámico:
Estas líneas, hechas en Jinja, permitirán a tu archivo acceder a las variables que contienen la información del título, autor y descripción del proyecto.
También para practicar algo de mecanografía (touch typing) en la terminal:
❯ touch README.md cookiecutter.json environment.yml
❯ mkdir hooks
❯ cd hooks
❯ touch post_gen_proyect.py pre_gen_project.py
❯ cd..❯ cd\{\{\ cookiecutter.project_slug\\}\}❯ touch .gitignore README.md environment.yml
❯ mkdir data notebooks
❯ cd data
❯ mkdir processed raw
❯ cd processed
❯ touch .gitkeep
❯ cd..❯ cd raw
❯ touch .gitkeep
👍
Genial, gracias!
No copiar los códigos dejados en el recurso, es mejor escribirlos tal cual en el video, porque tienen muchos errores los que dejan en el recurso.
Escriben coockiecutter en vez de cookiecutter, el archivo {{ coockiecutter.project.slug }} tiene la c y adicional un .slug en vez de raya al piso _slug .
gracias..!
Ver la estructura de carpetas en la terminal
Pueden usar tree. Para instalarlo en WSL pongan esto en su terminal:
sudo apt install tree
En Mac:
brew install tree
Luego van a la carpeta root de, en este caso cookiecutter-personal y ponen tree . Les devolverá lo siguiente:
import os
for path, dirs, files in os.walk('cookiecutter-personal'):print(f'|---{path}')for f infiles:print(f'\t|---{f}')
Creo que hubo un fallo en la última diapo de la clase ya que no se ve la estructura del reto que propone 😅.
Aprovechando que tenemos las slides, el reto es este:
Debido a que el codigo del video y el del texto de apoyo son diferentes podran encontrarse con estos errores como me ocurrio a mi:
A valid repository for "." could not be found in the following locations:
-> se soluciona revisando que documento .JSON este dentro de la carpeta principal y no en la de nuestra planilla, y aun mas importante que el nombre sea cookiecutter.json NO coockiecutter.json como lo sugiere el texto.
Unable to create file README
Error message: 'coockiecutter' is undefined
-> se soluciona yendo a el documento README y verificando que no haya ningun coockiecutter, en que caso de haberlo cambiarlo por cookiecutter
Espero les sirva, esas incongruencias entre video y texto de apoyo me llevo mucho tiempo para identificarlo
Genial, muchas gracias! Estaba buscando como resolver el primer error justamente.
Gracias, tuve los mismos problemas.
el codigo que dejo el profesor abajo la mayoria esta mal escrito no lo copien por que nunca les va a correr sobre todo el archivo READ. md
Asi quedaria
{{ cookiecutter.project_title }}
By: {{ cookiecutter.project_author_name }}
{{ cookiecutter.project_description }}
License
tengo este problema solo copie y pege y paso esto
Tenía el mismo error y me funciono reemplazar las comillas dobles " por comillas simples ' dentro de la expresión replace, así:
1️⃣ La plantilla se crea dentro de la carpeta {{ cookiecutter.project_slug }} . En ella se agrega todos los archivos y carpetas necesarios de la plantilla: README .md, carpeta de datos, de notebook, etc, (depende del proyecto).
2️⃣ Para hacer la creación de archivos interactivo, se utiliza los bloques declarativos y bloques de expresión dentro de los archivos. Ejemplos:
Las variables son representadas como coockiecutter.nombre_variable
Se pueden agregar tantas variables como sean necesarias y el nombre es personalizado.
3️⃣ Crear archivo de configuracion de variables cookiecutter.json: en este archivo se declaran todas las variables por defecto y se ubica fuera de la carpeta de la plantilla.
{"project_title":"Cookiecutter Personal","project_slug":"cookiecutter_personal","project_description":"Tu primer proyecto con Cookiecutter","project_author_name":"Tu nombre","project_packages":["All, Minimal"],"python_version":"3.10"}
4️⃣ Crear plantilla en la terminal con cookiecutter [PATH], donde PATH es la ruta donde se creara la plantilla.
Unable to create file 'README,md'
Error message: 'collections.OrderedDict object' has no attribute 'project_title'
Me salene stos errores al momento de crear la plantilla
Efectivamente esa variable project_title no la tenemos en el archivo json. En mi caso solo tuve que cambiar por la variable project_name en el archivo README.md
plantilla personalizada para un entorno virtual de trabajo profesional en Python,
Gracias..!
soy ciego, no vi donde está el reto del final (:
Dos ciegos!
Funcional y dejo script para crear las carpetas que me faltaban.
touch README.mdmkdir hooks && cd hooks && touch post_gen_proyect.py&& touch pre_gen_project.pycd ..cd \{\{cookiecutter.project_slug\}\
touch .gitignore&& cd data && mkdir processed raw && cd processed && touch .gitkeep&& cd ..&& cd raw && touch .gitkeepcd ../../&& cd notebooks && touch 0.0-\{\{cookiecutter.project_slug\}\}-introduction.ipynb
A continuar con los retos:
✔🎯
Hola! no he podido avanzar, en el minuto 8 debemos crear una carpeta con la terminal integrada en VSC con "cookiecutter ." pero no me funciona arroja esto:
A valid repository for "." could not be found in the following locations:
alguien con el mismo reto?
Sí, a mí me paso, lo que pasa es que tiene tu archivo cookiecutter.json dentro de la carpeta {{cookiecutter.project_slug}} y este va fuera de ella. Pruébalo y me comentas si te funcionó.
Saludos.
Lo que te comentó Marco Antonio, también debemos tener cuidado de que carpetas deben estar dentro de {{ cookiecutter.project_slug }} pues son las que queremos que formen parte de la plantilla
Puedo usar R tambien junto con python en cookiecutter?
Si, puedes agregar el kernel de R en tu ambiente virtual conda para tenerlo en tus plantillas con:
conda install r-essentials
Y si quieres utilizar notebooks con R en VS Code debes instalar el paquete r-languageserver :
luego del ctrl+shift+P en VSCode no me aparece la opción de terminal integrada, solo de "nueva terminal", y al abrir esa, no me permite activar el ambiente del curso, no me reconoce el comando conda, alguien sabe a qué se podría deber?
Una opción sería abrir VSCode desde la terminal con el comando code ., donde el . significa la carpeta en la que quieras trabajar.
Me paso igual, al abrir la terminal desde VSCode apareció una que no funciona para nuestras necesidades.
Se habia abierto una terminal de powershell, con esa no estamos trabajando (no instalamos conda ahí). Entonces lo que se tiene que hacer es por ahí mismo darle al boton de "+" y agregar "bash" usando esa (en mi caso, en el caso del profesor es zsh como aparece en el video). Luego de ello si funcionaron los pasos.
Hola, aqui esta mi reto:
La estructura del reto aparece al inicio del video en 00:10
.