Crea una cuenta o inicia sesi贸n

隆Contin煤a aprendiendo sin ning煤n costo! 脷nete y comienza a potenciar tu carrera

Crear plantillas de proyecto personalizadas

3/14
Recursos

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.md
environment.yml
coockiecutter.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:

# {{ coockiecutter.project_title }}
By: {{ coockiecutter.project_author_name }}
{{ coockiecutter.project_description }}

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.

Informaci贸n de environment.yml (entorno)

# conda env create --file environment.yml
name: cookiecutter-personal-platzi
channels:
  - anaconda
  - conda-forge
  - defaults
dependencies:
  - cookiecutter

Informaci贸n de environment.yml (configuraci贸n)

# conda env create --file environment.yml
name: {{ cookiecutter.project_slug }}
channels:
  - anaconda
  - conda-forge
  - defaults
dependencies:
  {% if cookiecutter.project_packages == "All" -%}
  - fs
  - jupyter
  - jupyterlab
  - pathlib
  {% endif -%}
  - pip
  {% if cookiecutter.project_packages == "All" -%}
  - pyprojroot
  {% endif -%}
  - python={{ cookiecutter.python_version }}
  - pip:
    {% if cookiecutter.project_packages == "All" -%}
    - pyhere
    {% endif -%}

Agregando informaci贸n a coockiecutter.json

Dentro de este archivo configurar谩s todos los valores de las variables que utilizas en los dem谩s archivos:

{
    "project_title": "Cookiecutter Personal",
    "project_slug": "{{ coockiecutter.project_title.lower().replace(" ", "_").replace("-", "_") }}",
    "project_description": "Tu primer proyecto con Cookiecutter.",
    "project_author_name": "Tu nombre",
    "project_packages": ["All, Minimal"],
    "python_version": "3.7"
}

Ejecuta el proyecto

  • Inicializas el Coockiecutter con conda.
  • Configuras la instalaci贸n, como en la clase anterior.

Contribuci贸n creada por: N茅stor Arellano.

Aportes 34

Preguntas 9

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Mi reto 馃槂

Reto

Crear la siguiente estructura de archivos:

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

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 .

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:

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:

.
鈹溾攢鈹 README.md
鈹溾攢鈹 cookiecutter.json
鈹溾攢鈹 environment.yml
鈹溾攢鈹 hooks
鈹偮犅 鈹溾攢鈹 post_gen_project.py
鈹偮犅 鈹斺攢鈹 pre_gen_project.py
鈹斺攢鈹 {{ cookiecutter.project_slug }}
    鈹溾攢鈹 README.md
    鈹溾攢鈹 data
    鈹偮犅 鈹溾攢鈹 processed
    鈹偮犅 鈹斺攢鈹 raw
    鈹溾攢鈹 environment.yml
    鈹斺攢鈹 notebooks
        鈹斺攢鈹 0.0-{{ cookiecutter.project_slug }}-introduction.ipynb

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: 鈥榗oockiecutter鈥 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

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

Funcional y dejo script para crear las carpetas que me faltaban.

touch README.md
mkdir hooks && cd hooks && touch post_gen_proyect.py && touch pre_gen_project.py
cd ..
cd \{\{cookiecutter.project_slug\}\
touch .gitignore && cd data && mkdir processed raw && cd processed && touch .gitkeep && cd .. && cd raw && touch .gitkeep
cd ../../ && cd notebooks && touch 0.0-\{\{cookiecutter.project_slug\}\}-introduction.ipynb

A continuar con los retos:

plantilla personalizada para un entorno virtual de trabajo profesional en Python,

馃搶 Resumen - C贸mo crear plantillas personalizadas

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:

馃敼 Ejemplo README .md interactivo:

	# {{ cookiecutter.project_title }} 
	By: {{ cookiecutter.project_author_name }}
	{{ cookiecutter.project_description }}

馃敼 Ejemplo environment.yml interactivo:

# conda env create --file environment.yml
name: {{ cookiecutter.project_slug }}
channels:
  - anaconda
  - conda-forge
  - defaults
dependencies:
  {% if cookiecutter.project_packages == "All" -%}
  - fs
  - jupyter
  - jupyterlab
  - pathlib
  {% endif -%}
  - pip
  {% if cookiecutter.project_packages == "All" -%}
  - pyprojroot
  {% endif -%}
  - python={{ cookiecutter.python_version }}
  - pip:
    {% if cookiecutter.project_packages == "All" -%}
    - pyhere
    {% endif -%}
  • 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.

La estructura del reto aparece al inicio del video en 00:10
.

soy ciego, no vi donde est谩 el reto del final (:

Reto

.
鈹溾攢鈹 .DS_Store
鈹溾攢鈹 README.md
鈹溾攢鈹 cookiecutter.json
鈹溾攢鈹 environment.yml
鈹溾攢鈹 hooks
鈹   鈹溾攢鈹 post_gen_project.py
鈹   鈹斺攢鈹 pre_gen-project.py
鈹斺攢鈹 {{ cookiecutter.project_slug }}
    鈹溾攢鈹 .DS_Store
    鈹溾攢鈹 .gitignore
    鈹溾攢鈹 README.md
    鈹溾攢鈹 data
    鈹   鈹溾攢鈹 .DS_Store
    鈹   鈹溾攢鈹 processed
    鈹   鈹   鈹斺攢鈹 .gitkeep
    鈹   鈹斺攢鈹 raw
    鈹       鈹斺攢鈹 .gitkeep
    鈹溾攢鈹 environment.yml
    鈹斺攢鈹 notebooks
        鈹斺攢鈹 0.0-{{ cookiecutter.project_slug }}-introduction.ipynb

Ambos cursos de entorno han sido excelente, pero estas cosas es de esas que intentan automatizar u optimizar procesos y terminan haciendo lo contrario, hacerlo mas complejo, yo haria simplemente subiria un repo a github y cuando lo clone le borraria la carpeta .git

Hola, aqui esta mi reto: ![](https://static.platzi.com/media/user_upload/image-691625d6-912b-427a-8c8b-86128bddb88f.jpg) ![](https://static.platzi.com/media/user_upload/image-bb560db7-44fa-46fc-86df-08f2f973c7a1.jpg) ![](https://static.platzi.com/media/user_upload/image-1dc5c864-6138-422e-af8b-13cb9699371e.jpg)

Hola. Les comparto el resultado de ejecutar el ejercicio planteado por el profesor desde la terminal WSL:

Y el reto:

El reto: ![](https://drive.google.com/file/d/1qvEpcZjbJaxviJgHhDZ9boXFUvfl6AMP/view)![](https://static.platzi.com/media/user_upload/Reto1-9cd636c8-844d-47a9-a19e-e71f433d1fe3.jpg) Y mi soluci贸n con el comando tree: `.` `鈹斺攢鈹 cookiecutter-personal` ` 鈹溾攢鈹 README.md` ` 鈹溾攢鈹 cookiecutter.json` ` 鈹溾攢鈹 environment.yml` ` 鈹溾攢鈹 hooks` ` 鈹偮犅 鈹溾攢鈹 post_gen_project.py` ` 鈹偮犅 鈹斺攢鈹 pre_gen_project.py` ` 鈹斺攢鈹 {{ cookiecutter.project_slug }}` ` 鈹溾攢鈹 README.md` ` 鈹溾攢鈹 data` ` 鈹偮犅 鈹溾攢鈹 processed` ` 鈹偮犅 鈹斺攢鈹 raw` ` 鈹溾攢鈹 environment.yml` ` 鈹斺攢鈹 notebook` ` 鈹斺攢鈹 0.0-{{cookiecutter.project_slug}}-introduction.ipynb` No se ve .gitignore nom谩s pero est谩: ![](https://static.platzi.com/media/user_upload/image-99ceaf19-2a3d-4282-9928-e351f81d12f2.jpg)

He vuelto del curso de jupyter y terminal para no perderme en este curso, con todos los animos!

馃馃樈馃樈

Reto

Al principio no entend铆 bien lo de las variables y claro era porque al copiar al profe hab铆a typo jajaja


Para que se puedan ver tambi茅n los archivos .gitignore y .gitkeep en bash, se puede utilizar el comando

tree -a

Este nos va permitir archivos ocultos, quedando de la siguiente forma:

Confunde un poco que en la documentacion escriban 鈥渃oockiecutter鈥 con la 鈥渃鈥 entre la 鈥渙鈥 y la 鈥渒鈥.

Para los que les sale un error " Incorrect type. Expected 鈥渟tring鈥. yaml-schema: " al copiar el archivo environment.yml que esta dentro de la carpeta {{ cookiecutter.project_slug }}, Solo deben desinstalar la extensi贸n YAML en vs code

tree -a
.
鈹溾攢鈹 cookiecutter.json
鈹溾攢鈹 enviroment.yml
鈹溾攢鈹 hooks
鈹偮犅 鈹溾攢鈹 post_gen_project.py
鈹偮犅 鈹斺攢鈹 pre_gen_project.py
鈹斺攢鈹 {{cookiecutter.project.slug}}
    鈹溾攢鈹 .gitignore
    鈹溾攢鈹 README.md
    鈹溾攢鈹 cookiecutter.json
    鈹溾攢鈹 data
    鈹偮犅 鈹溾攢鈹 processed
    鈹偮犅 鈹偮犅 鈹斺攢鈹 .gitkeep
    鈹偮犅 鈹斺攢鈹 raw
    鈹偮犅     鈹斺攢鈹 .gitkeep
    鈹溾攢鈹 enviroment.yml
    鈹斺攢鈹 notebooks

6 directories, 10 files

Me daba error y error y era porque en el JSON puse

 "cookiecutter.project_title": " Hola",

no va cookiecutter,sino

"project_title" : " Hola",

Incluso si la variable fuera Titulo,solo hay que poner solo Titulo en el JSON y funciona. Al igual si se declaran variables en el JSON que no figuran en los archivos igual funciona,solo que al correr pedir谩 estas variables aunque no esten en el entorno .

Reto

Para crear el notebook no se olviden que para declarar un s铆mbolo o espacio deben usar \ \{ \{ \} \}

touch 0.0\ \{\{\ cookiecutter.project_slug\ \}\}-introduction.ipynb
{
"project_title" : "Cookiecutter personal",
"project_slug" : "cookiecutter_personal",
"project_description" : "Something cool",

"enhorabuena" : "Lo has echo incre铆ble\n Ahora puedes crear plantillas\n totalmente personalizadas.\n Disfruta todo lo creado!",

"project_author_name": "Your name",
"project_packages" : ["All", "Minimal"],
"python_version" : "3.7"
}

Dejo el desaf铆o resuelto:

As铆 me qued贸 el reto 馃榿

A煤n sigo con la intriga del prop贸sito de los nuevos archivos 馃