Mi plantilla personalizada para proyectos Python
Python, como el lenguaje pragmático que es, no exige mucho para empezar. Un archivo de texto con código válido, que por convención lleva la extensión .py y constituye un "módulo" en la jerga pythónica, ya es un pequeño programa (un script); lo ejecutamos con python <archivo> y a cobrar. Pero cuando esa simple pieza de código necesita crecer a más archivos o merece ser distribuida, quizás porque será dependencia de otro proyecto o simplemente porque consideramos que a alguien le servirá, entonces necesita algo de estructura y metadatos.
Esto no es algo exclusivo de Python: cuando se comienza un proyecto de software siempre hay una serie de archivos y estructuras básicas que sirven como punto de partida; el conjunto mínimo de archivos y carpetas, configuraciones y código "básico" que se necesita cuando se desea compartir el código como una aplicación o biblioteca: el boilerplate de un proyecto. El boilerplate no define lógica, pero sí establece la base técnica, muchas veces basada en convenciones y otras en gustos personales, sobre la cual se construirá todo lo demás.
Este artículo detalla las decisiones que hice para la plantilla e inicialización automatizada (el "bootstrapping") que uso para mis proyectos, basada en la herramienta Copier.
Si querés probar, la plantilla está en mgaitan/python-package-copier-template y podés crear un proyecto nuevo a partir de ella así:
uvx --with=copier-template-extensions copier copy --trust "gh:mgaitan/python-package-copier-template" /path/to/your/new/project
Lo destacado:
- 🐍 Paquete Python moderno (+3.12) con configuración centralizada en
pyproject.toml. - 📦 Build y gestión de dependencias con uv, distinguidas por grupos (dev/qa/docs).
- 🧹 Linter y formateado vía Ruff con un conjunto amplio de reglas habilitadas.
- ✅ Type checking vía ty.
- 🧪 Tests con pytest, coverage.py y otras extensiones
- 📚 Documentación con Sphinx, MyST y algunas extensiones, desplegada en GitHub Pages
- 🤖 Automatización de la creación de proyecto en GitHub vía GitHub CLI
- ⚙️ Workflow de CI en GitHub Actions
- 🚀 Workflow para releases automáticos vía Trusted Publishing
- 🧠 Defaults vía introspección para minimizar las decisiones durante el cuestionario inicial
- 🛠️ Makefile con algunos atajos para tareas comunes
- 📄 Generación de documentos genéricos como LICENSE/CODE_OF_CONDUCTS/AGENTS.md, etc.
- 🌀 Setup inicial del entorno de desarrollo y repositorio git
- ♻️ Proyectos actualizables con
copier update
Y muchos más detalles que me estoy olvidando ahora.
