PaaS: Python as a Service
La tecnología cambia y nos trae muchas ventajas. Pero el volumen de conocimiento a manejar se ha vuelto enorme: python, ipython, jupyter notebooks y sus librerías por un lado, y por el otro lado, servidores, kubernetes, y un sin fin de siglas. Aquellos que saben de todo esto pueden sacarles el mejor provecho pero… ¿cómo podemos disponibilizar todas estas tecnologías a un usuario que no sabe ni necesita conocer de todo esto?
¿Existe alguna forma de entregar PaaS: Python as a Service?
Sí. Hay una forma que resulta sencilla tanto para el usuario como para el desarrollador.
¿Qué buscamos para el usuario?
La forma más sencilla para un eventual usuario, es crear una librería permita instalarse con pip:
pip install la_libreria_que_hice_con_mucho_esfuerzo
De esa manera un usuario podría usar la librería con jupyter notebook, sin instalar nada en local, con mybinder o google colab. ¡Hasta podría usarlo desde un tablet o celular!
Un ejemplo sencillo: calculando quién es el próximo en estar de cumpleaños.
Tengo buena memoria para algunas cosas, pero los cumpleaños no se cuentan entre esas cosas. Es un problema familiar, y probablemente a más de alguno le podría servir un recordatorio. Con un código en python muy sencillo podría implementar una función que muestre quienes son las próximos 3 personas en estar de cumpleaños y calculara la edad que van a cumplir. ¿Cómo podría compartir ese código con mi familia?
¡Muy simple! Con MyBinder o Google Colab.
Es posible configurar MyBinder (pero no en Google Colab) para que la librería ya venga instalada por defecto.
## ¿Qué tiene que hacer el desarrollador?
Hay varias cosas que necesitamos tener para poder proveer un servicio fácil a los usuarios: * Librería instalable por pip: requiere definir un archivos setup.py y configurar una estructura de carpetas adecuadamente. El código podrá instalarse desde pypi (oficial, estable) y github (edge). * Usar git: permite mantener versiones del código y hacer incrementos de código. * Interface simple: Esconder la complejidad del código con orientación a objetos, exponiendo sólo lo estrictamente necesario. * Guardar parámetros: cuando todo falla, permite debuggear rápidamente (y reproducir las condiciones de ejecución). En el caso anterior, me sirvió para darme cuenta que Google Colab usa python 3.6.9 y por eso no estaban disponibles ciertas funciones recientes de la librería estándar datetime. * Documentación: para usuarios más avanzados y para documentar la librería.
¿Cómo funciona?
Empaqueté todo lo anterior en una librería que sirve como framework de trabajo, que basta con descargar y personalizar. La librería está en github y acá está la documentación.
En resumen, el framework tiene preconfiguradas buenas prácticas, librerías y recursos que permiten cumplir con pip, git, interface simple, documentación y guardar parámetros, al menos de la forma más minimal posible.
Adendum 7 Diciembre 2023
Más de 3 años después de la escritura de este post, todo lo anterior puede solucionarse mucho más facilmente con streamlit.