Documentación de la plantilla
Descripción
Plantilla para organizar proyectos que usan Python e incorpora mejores prácticas relacionadas con:
- Version control: Git (libro: Pro Git, tutorial: Getting Git Right: Learn Git with Tutorials, News and Tips)
- Project management, Virtual environments y Dependencies management: uv
- Static typing: mypy
- Code formatting, Linting y Style enforcement: Ruff
- Package vulnerability analysis: pip-audit
- Pre-Commit hooks: pre-commit
- Documentation: MkDocs, Material for MkDocs, Google docstrings
- Environmental variables y
.env
files: Pydantic-Settings - Logging: Loguru
- Debugging: The Python Debugger (tutorial: Python Debugging With Pdb), IceCream
- Testing: pytest (tutorial: Effective Python Testing With Pytest), pytest-cov
Opcionalmente:
dvc
: Data version control: DVC, (ver página Data version control para más detalles)notebooks
: Python notebooks: marimo, (ver página Notebooks para más detalles)
Estructura
El proyecto usa la siguiente estructura de carpetas y archivos:
A continuación se describe el propósito de cada una de las carpetas:
-
data/
-
Carpeta para almacenar los archivos de datos (e.g. archivos
.csv
,.parquet
,.xlsx
, ...). Dentro de la carpeta se pueden crear sub-carpetas para almacenar los datos en distintos estados (e.g. crudos (raw), pre-procesados, procesados, ...).Esta carpeta NO debe estar versionada con Git, y por defecto, está incluida en el archivo
.gitignore
del proyecto1.Se incluye una sub-carpeta especial (
querys/
) destinada a almacenar los querys (archivos.sql
) que se utilizan para generar los datos. Esta sub-carpeta si se debe versionar en Git, y por defecto, está configurada para que así sea.Para hacer versionamiento de los datos que hagan parte del proyecto y sean necesarios para asegurar la reproducibilidad del mismo, y por lo tanto se almacenen dentro de esta carpeta, se debe hacer uso lo explicado en la práctica relacionada con Data version control.
-
docs/
-
Carpeta para almacenar y gestionar la documentación del proyecto. Se administra usando MkDocs, Material for MkDocs y Google docstrings.
-
notebooks/
-
Carpeta para almacenar los cuadernos (notebooks usando marimo) que utilice en el proyecto.
Para gestionar (i.e. crear, editar y eliminar) cuadernos (notebooks), se debe hacer uso lo explicado en la práctica relacionada con Notebooks.
-
outputs/
-
Carpeta para almacenar los archivos de resultados (e.g. archivos
.pdf
,.png
,.csv
,.parquet
,.xlsx
, ...). Dentro de la carpeta se pueden crear sub-carpetas para almacenar distintos tipos de resultados (e.g. informes, gráficos, resultados ...).Esta carpeta NO debe estar versionada con Git, y por defecto, está incluida en el archivo
.gitignore
del proyecto1.Para hacer versionamiento de los datos que hagan parte del proyecto y sean necesarios para asegurar la reproducibilidad del mismo, y por lo tanto se almacenen dentro de esta carpeta, se debe hacer uso lo explicado en la práctica relacionada con Data version control.
Si se generan informes, se recomienda que en ellos incluya el tag que identifica la versión del proyecto que permite reproducirlos. De esta manera, en cualquier otro momento es posible recrear los datos, los modelos y el código que permite llegar a los mismos resultados.
-
src/
-
Carpeta para almacenar el código (archivos
.py
). Dentro de la carpeta se pueden crear sub-carpetas para organizar el código adecuadamente. -
tests/
-
Carpeta para almacenar las pruebas del proyecto (archivos
.py
). Dentro de la carpeta se pueden crear sub-carpetas para organizar las pruebas adecuadamente. Las pruebas se deben escribir usando pytest.
Uso
Para instalar la plantilla y empezarla a usar en un nuevo proyecto, debe tener instalado previamente en su equipo, Git (versión >= 2.50.0) y uv (versión >= 0.7.13).
¡Atención!
El proyecto tiene un makefile
y un archivo shell (write-requirements.sh
) que no corren en WindowsOS nativamente. Por lo tanto, si está utilizando este sistema operativo, es necesario instalar adicionalmente Make. (Tutorial: How to setup/install GNU make on Windows).
Si siguió las instrucciones descritas anteriormente, todas las funcionalidades de la plantilla deben funcionar adecuadamente tanto en WindowsOS, como en MacOS y LinuxOS. Si se le presentan errores:
- Es necesario remover el pre-commit que exporta los archivos de librarías requeridas de
.pre-commit-config.yaml
. y no usarmake
. - Agradecemos lo reporte para buscar una solución.
Posteriormente, siga los pasos descritos a continuación:
-
Cree un nuevo repositorio a partir de esta plantilla (template) con el nombre de su nuevo proyecto. Asegúrese de marcar la opción Include all branches.
-
Clone el nuevo repositorio en su equipo local.
-
Instale el proyecto, ejecutando:
Si desea usar algunas de las librerías que proporcionan prácticas opcionales, ejecute:
- Debe reemplazar
<práctica opcional>
por el código de la práctica opcional. Por ejemplo:... --extra dvc
.
Si desea usar más de una práctica opcional, simplemente repita
--extra <práctica opcional>
las veces que necesite al final de la instrucción. - Debe reemplazar
-
En el proyecto se usan pre-commit hooks para automatizar la verificación del código antes de los commits y los pushs. La librería ya está incluida en las dependencias necesarias para contribuir al proyecto, sin embargo, es necesario configurarla usando las siguientes instrucciones:
-
Consulte el archivo
src/tutorial.py
para conocer cómo usar las variables de entorno, el log y cómo hacer debugging fácilmente. -
Consulte el archivo
docs/tutorial.md
para conocer las capacidades instaladas para documentar el proyecto. Para trabajar en la documentación, ejecute:Esto le permitirá ver en el explorador la versión final de la documentación y hará que esta se actualice en línea en la medida que realice cambios.
¡Eso es todo!, puede empezar a trabajar en su nuevo proyecto.