Crea una cuenta o inicia sesión

¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Invierte en tu educación con el precio especial

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

11 Días
6 Hrs
8 Min
21 Seg

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 35

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 .

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

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

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

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

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:

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)

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
.

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

Para crear plantillas de proyectos personalizadas, puedes utilizar herramientas como \*\*Cookiecutter\*\*, que facilita la creación de proyectos a partir de una plantilla predefinida. A continuación te explico los pasos para crear una plantilla personalizada utilizando \*\*Cookiecutter\*\*, o si prefieres, cómo hacerlo manualmente. \### Crear una plantilla personalizada con \*\*Cookiecutter\*\* \#### Paso 1: Instalar \*\*Cookiecutter\*\* Si aún no lo has hecho, instala Cookiecutter con el siguiente comando: ```bash pip install cookiecutter ``` \#### Paso 2: Crear la estructura de la plantilla Crea un directorio que represente tu plantilla de proyecto. Dentro de este directorio, puedes usar variables para que \*\*Cookiecutter\*\* las reemplace con los valores que el usuario proporcionará. Por ejemplo, crea un directorio llamado `project-template` con la siguiente estructura: ``` project-template/ │ ├── cookiecutter.json ├── {{cookiecutter.project\_name}}/ │ ├── README.md │ ├── setup.py │ ├── {{cookiecutter.module\_name}}/ │ │ ├── \_\_init\_\_.py │ │ └── main.py └── LICENSE ``` \#### Paso 3: Crear el archivo `cookiecutter.json` Este archivo es donde defines las variables que deseas que \*\*Cookiecutter\*\* solicite al usuario cuando genere un nuevo proyecto. Por ejemplo: ```json { "project\_name": "my\_project", "module\_name": "my\_module", "author\_name": "Your Name", "license": \["MIT", "BSD", "GPL"] } ``` \#### Paso 4: Crear los archivos de tu plantilla Dentro del directorio `{{cookiecutter.project\_name}}`, puedes colocar los archivos que formarán parte de tu proyecto. Usa las variables definidas en el archivo `cookiecutter.json` para personalizar el contenido. Por ejemplo, el archivo `README.md` podría verse así: ```markdown \# {{cookiecutter.project\_name}} Autor: {{cookiecutter.author\_name}} Este es el proyecto {{cookiecutter.project\_name}}. Fue creado utilizando una plantilla personalizada. ``` El archivo `setup.py` para un proyecto de Python podría ser algo así: ```python from setuptools import setup, find\_packages setup( name="{{cookiecutter.project\_name}}", version="0.1", packages=find\_packages(), author="{{cookiecutter.author\_name}}", license="{{cookiecutter.license}}", ) ``` \#### Paso 5: Crear un módulo o código base Dentro del directorio `{{cookiecutter.module\_name}}`, crea el archivo `main.py`, que puede contener el código base para tu proyecto: ```python def main(): print("Bienvenido al proyecto {{cookiecutter.project\_name}}") if \_\_name\_\_ == "\_\_main\_\_": main() ``` \#### Paso 6: Generar un nuevo proyecto usando la plantilla Una vez que tengas tu plantilla creada, puedes usar \*\*Cookiecutter\*\* para generar un proyecto basado en ella. Usa el siguiente comando, indicando la ruta hacia tu plantilla: ```bash cookiecutter path/to/project-template ``` \*\*Cookiecutter\*\* te pedirá que ingreses los valores para `project\_name`, `module\_name`, `author\_name`, y cualquier otra variable que hayas definido. Generará un nuevo proyecto en base a esos valores. \### Crear una plantilla manualmente Si no deseas usar Cookiecutter, puedes crear una plantilla de manera manual, simplemente configurando la estructura y archivos de tu proyecto en un directorio, y copiando esa estructura cada vez que inicies un nuevo proyecto. Por ejemplo, podrías hacer un script bash que copie la estructura de directorios y archivos necesarios: ```bash \#!/bin/bash mkdir $1 cd $1 mkdir src tests touch README.md setup.py .gitignore echo "# $1" >> README.md echo "Proyecto creado con estructura básica." >> README.md ``` Luego, podrías ejecutar el script proporcionando un nombre de proyecto: ```bash ./create\_project.sh nombre\_del\_proyecto ``` Esto copiará la estructura base de tu plantilla manual para que puedas empezar rápidamente un nuevo proyecto.

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 “coockiecutter” con la “c” entre la “o” y la “k”.

Para los que les sale un error " Incorrect type. Expected “string”. 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 🤔