Configuración Entorno de Desarrollo

Por Jose R. Zapata

Ultima actualización: 25/Feb/2025

Invítame a un Café

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

  1. Local: Computador personal Se debe tener un ambiente de desarrollo local para escribir, depurar y probar el código.
  2. 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.
  3. 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:

  1. Instalar Python y gestionar versiones
  2. Configurar un sistema de control de versiones - Git
  3. Crear un ambiente virtual e iniciar el proyecto
  4. 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ísticaUVPIP + virtualenvPoetryPyenv
ImplementaciónRustPythonPythonShell + Python
Velocidad10-100x más rápido que todosBaseMás rápido que pipNo aplica (gestor de versiones)
Uso de memoriaMuy eficienteMayorModeradaNo aplica
Gestión de entornos virtualIncorporadoSe necesitan herramientas separadasIncorporadoNo (pero se integra con virtualenv y conda)
Resolución de dependenciasRápido, modernoBásicoModernoNo aplica
Gestion de version PythonSiNoNoSi
.lock info de dependenciasNo (solo requirements.txt básico)No aplica
Estructura de proyectoNoNo
Publicación de paquetesSí (con twine)No
Manejo de erroresMensajes clarosBásicoBuenoNo aplica
Huella de recursosMínimaModeradaModeradaLigera
Consistencia entre plataformasLimitadaBuena

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

  1. Instalar UV

    curl -LsSf https://astral.sh/uv/install.sh | sh
    

    Verificar la version instalada: uv version

  2. 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

  1. 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

Phd. Jose R. Zapata