Por Jose R. Zapata
Ultima actualización: 25/Feb/2025
La configuración del entorno de desarrollo es un aspecto importante en el desarrollo de un proyecto de software. Un entorno de desarrollo bien configurado facilita la escritura, depuración y mantenimiento del código. En este módulo, se presentan las herramientas y prácticas recomendadas para configurar un entorno de desarrollo de calidad para proyectos de Ciencia de datos y Machine learning con Python.
La buena configuración debe garantizar que el entorno de desarrollo sea el mismo en el computador local de todos los desarrolladores, en los servidores de integración continua y en los servidores de producción (nube). Esto garantiza que el código se ejecute de la misma manera en todos los entornos y lograr:
- Reproducibilidad
- Automatización (CI/CD)
- Escalabilidad
- Mantenible
- Seguridad
Ambiente de ejecución del código
- Local: Computador personal Se debe tener un ambiente de desarrollo local para escribir, depurar y probar el código.
- Servidores de Integración Continua: GitHub Actions, GitLab CI, Jenkins, etc. Se ejecutan pruebas automáticas y validaciones de calidad de código, que evitan errores y fallas en el código mientras mantiene un ciclo constante de desarrollo y actualizaciones del software.
- Servidores de Producción: AWS, Google Cloud, Azure, etc. Se ejecuta el código en un ambiente de producción, donde se atienden las solicitudes de los usuarios puede ser por medio de una API, una aplicación web, etc. Ademas se tienen procesos de monitoreo, re entrenamiento de modelos, etc.
Configuración del entorno de desarrollo
En este módulo se presentan las herramientas y prácticas recomendadas para configurar un entorno de desarrollo de calidad para proyectos de Ciencia de datos y Machine learning con Python.
Es importante considerar que los servidores de integración continua y producción funcionan con sistemas operativos Linux, por lo que se recomienda que el ambiente de desarrollo local sea Linux o se utilice una máquina virtual o contenedor Docker con Linux.
Incluso ambientes de desarrollo en la nube como Google Colab, github codespaces, Kaggle Notebooks, Deepnote etc. utilizan Linux.
Si utiliza Windows, se recomienda instalar WSL (Windows Subsystem for Linux) o utilizar un contenedor Docker con Linux.
El problema con Windows se da en el manejo de los paths de los archivos, por ejemplo, en Windows se utiliza \
y en Linux /
, Ademas la compatibilidad de algunas librerías y herramientas de desarrollo lo que puede generar problemas al ejecutar scripts de Python en los servidores que la mayoria son Linux.
la configuración del entorno de desarrollo tiene los siguientes pasos:
- Instalar Python y gestionar versiones
- Configurar un sistema de control de versiones - Git
- Crear un ambiente virtual e iniciar el proyecto
- Instalar paquetes y dependencias
Herramientas
Las herramientas para gestionar las versiones de Python, ambientes virtuales y gestión de dependencias que existían hasta hace poco eran pip + virtualenv, pipenv, poetry, etc. Astral ha lanzado en 2024 una nueva herramienta muy rapida llamada uv que unifica todas estas funcionalidades en una sola herramienta.
Característica | UV | PIP + virtualenv | Poetry | Pyenv |
---|---|---|---|---|
Implementación | Rust | Python | Python | Shell + Python |
Velocidad | 10-100x más rápido que todos | Base | Más rápido que pip | No aplica (gestor de versiones) |
Uso de memoria | Muy eficiente | Mayor | Moderada | No aplica |
Gestión de entornos virtual | Incorporado | Se necesitan herramientas separadas | Incorporado | No (pero se integra con virtualenv y conda) |
Resolución de dependencias | Rápido, moderno | Básico | Moderno | No aplica |
Gestion de version Python | Si | No | No | Si |
.lock info de dependencias | Sí | No (solo requirements.txt básico) | Sí | No aplica |
Estructura de proyecto | Sí | No | Sí | No |
Publicación de paquetes | Sí | Sí (con twine) | Sí | No |
Manejo de errores | Mensajes claros | Básico | Bueno | No aplica |
Huella de recursos | Mínima | Moderada | Moderada | Ligera |
Consistencia entre plataformas | Sí | Limitada | Buena | Sí |
Actualmente mi recomendación es utilizar UV para gestionar las versiones de Python, ambientes virtuales y gestión de dependencias, es una sola herramienta que unifica todas estas funcionalidades y es muy rápida.
Para gestionar los ambientes virtuales y librerías Hace muchos años utilizaba [Conda] pero es muy pesada, instala muchas librerías que no necesito, es lenta y tuve muchos problemas instalando librerías que no eran soportadas por conda. Luego desde 2021 usaba Pyenv + Poetry y funcionan bien pero son 2 herramientas y son más lentas que UV, de verdad la diferencia es notable desde finales de 2024 UV es mi herramienta base de trabajo.
1. Instalar Python y gestionar versiones
Instalar UV
curl -LsSf https://astral.sh/uv/install.sh | sh
Verificar la version instalada:
uv version
Instalar Python con UV
Por ejemplo, para instalar Python 3.11 en su ultima version:
uv python install 3.11
pueden instalar todas las versiones que desee, para tenerlas disponibles en su sistema.
uv python install 3.10 3.11 3.12
2. Configurar un sistema de control de versiones
Instalar Git
- Linux:
sudo apt-get install git
- MAC:
brew install git
3. Crear un ambiente virtual e iniciar el proyecto
3.1 Proyecto nuevo
- Crear la carpeta del proyecto y entrar en ella:
mkdir data-analysis
cd data-analysis
Definir la version de python para el proyecto y iniciar el proyecto
Por ejemplo para un proyecto con Python 3.11:
uv python pin 3.11
uv init
esto creara los archivos que son necesarios para gestionar las dependencias del proyecto:
.
├── .python-version #Versión de python del proyecto.
├── README.md #Documentación del proyecto.
├── main.py #Archivo de iniciación. (se puede borrar)
└── pyproject.toml #Información del proyecto y dependencias.
Finalmente crear el ambiente virtual e instalar las dependencias:
uv sync
esto creara la carpeta .venv
(Nunca subirla a git) donde estarán los archivos del ambiente virtual.
y el archivo uv.lock
que contiene la información de las dependencias del proyecto, este archivo es importante para que todos los desarrolladores tengan las mismas versiones de las dependencias.
Finalmente, el comanndo para activar el ambiente virtual:
source .venv/bin/activate
3.2 Proyecto existente
Cuando el proyecto ya tiene la configuración de UV (pyproject.toml, uv.lock y .python-version ), luego de clonar y entrar a la carpeta del proyecto, iniciar el proyecto y el ambiente virtual con el comando:
uv sync
Finalmente, se activa el ambiente virtual:
source .venv/bin/activate
Si ya esta instalado el ambiente virtual, cada vez que se quiera trabajar en el proyecto solo se debe activar el ambiente con el comando anterior.
para salir del ambiente virtual se debe ejecutar el comando deactivate
4. Instalar paquetes y dependencias
Para instalar paquetes y dependencias en el proyecto se debe utilizar el comando uv add
, por ejemplo:
uv add pandas scikit-learn
uv se encarga de verificar las dependencias y las versiones de los paquetes que se instalan, para que no haya conflictos.
Esto actualiza el archivo pyproject.toml
y el archivo uv.lock
con la información de las dependencias.
Lo normal es que se necesiten unas librerías para desarrollo y otras para producción, para instalar las librerías de desarrollo se debe usar el flag --dev
:
Por ejemplo se puede necesitar la librería matplotlib para visualizar el análisis de datos, pero no es necesaria para eu funcione el modelo de machine learning en producción.
En este ejemplo solo se instala matplotlib, pre-commit y pytest en el ambiente de desarrollo:
uv add --dev matplotlib pre-commit pytest
En el momento de instalar las dependencias en el ambiente de producción se omiten las librerias de desarrollo con el siguiente comando:
uv sync --no-dev
Diapositivas
Referencias
- https://docs.astral.sh/uv/
- https://talkpython.fm/episodes/show/476/unified-python-packaging-with-uv
- https://codemaker2016.medium.com/introducing-uv-next-gen-python-package-manager-b78ad39c95d7
- https://www.saaspegasus.com/guides/uv-deep-dive/
- https://www.datacamp.com/tutorial/python-uv