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 9

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

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

Mi reto 😃

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

A continuar con los retos:

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:

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

Dejo el desafío resuelto:

Así me quedó el reto 😁

Aún sigo con la intriga del propósito de los nuevos archivos 🤔