Entornos
Bibliografía
Introducción
Existen varias opciones para la gestión de paquetes en Python. Independientemente de la que elijas, mi recomendación es optar siempre por la alternativa más simple y minimalista, aunque también dependerá mucho del entorno de desarrollo que tengas en la empresa o de a lo que estés acostumbrado. Recuerda que, al final, estas siguen siendo herramientas que tienes que considerar y, si te aportan mejoras, implementarlas gradualmente. Cuanto menor sea el número de dependencias y más ligero sea el entorno, más fácil será llevarlo a producción (por ejemplo, en una imagen de Docker), compartirlo con tu equipo o mantenerlo en el tiempo.
En la actualidad, las opciones que más recomiendo son Poetry y uv. Ambas
herramientas agilizan la creación y gestión de entornos, permiten mantener las
configuraciones del proyecto de forma organizada mediante un archivo pyproject.toml y,
sobre todo, favorecen la reproducibilidad de los proyectos.
Anaconda
Logo de Anaconda
Anaconda es una plataforma de código abierto diseñada para la creación y gestión de entornos virtuales en Python, enfocada en proyectos de ciencia de datos y aprendizaje automático. Proporciona una distribución de Python con numerosas bibliotecas preinstaladas, un gestor de paquetes propio y herramientas como Jupyter.
La gestión de paquetes en Anaconda se realiza mediante Conda, aunque también es posible utilizar PIP. Sin embargo, no es recomendable mezclar ambos, ya que pueden surgir errores en la compatibilidad de paquetes.
Durante años fue la plataforma más usada en ciencia de datos, ya que ofrecía un ecosistema completo (Jupyter, Spyder, RStudio, etc.) de manera muy sencilla. Sin embargo, con el tiempo ha presentado limitaciones como una licencia más restrictiva para empresas y un exceso de dependencias por defecto.
Hoy en día existen alternativas más eficientes, modernas y ligeras, como Poetry y uv, que utilizan el gestor de entornos virtuales de Python y evitan instalar paquetes innecesarios.
VENV
Por otro lado, VENV es una alternativa
más ligera para la creación de entornos virtuales sin las dependencias adicionales de
Anaconda, y que ya viene por defecto cuando instalamos Python. En este caso, la gestión
de paquetes se lleva a cabo con PIP.
Poetry
Logo de Poetry
Poetry es otra herramienta de gestión de dependencias en
proyectos de Python.
Permite, entre otras cosas, administrar dependencias por grupos (producción,
pruebas, documentación, etc.), eliminando la necesidad de crear múltiples ficheros
de requisitos de dependencias (los requirements.txt) o de tener un único fichero.
También permite crear y manejar entornos virtuales automáticamente, y facilitar la creación de wheels para empaquetar proyectos y publicarlos en PyPI o en tu repositorio de paquetes privado.
uv
uv es una de las herramientas más recientes y eficientes
para la gestión de entornos virtuales y dependencias en Python, y es la que
personalmente utilizo y recomiendo. Su objetivo principal es simplificar y acelerar
tareas que tradicionalmente requieren múltiples herramientas, como pip, poetry o
venv.
Una de sus principales ventajas es la posibilidad de crear un entorno virtual por proyecto. Esta es la mejor práctica, ya que así evitamos mezclar dependencias entre proyectos, lo que puede llevar a conflictos entre versiones.
Lo que más me ha impresionado de uv es su velocidad, en parte gracias a que utiliza
Rust para instalar y resolver dependencias en milisegundos, superando a pip y
poetry. Además, permite crear un sistema similar a cargo de Rust, basado en archivos
pyproject.toml, donde podemos definir metadatos de nuestro proyecto, gestionar
paquetes con sus versiones, especificar la versión de Python requerida, así como
configuraciones específicas de proyectos que instalemos, como linters o similares.
Por otro lado, uv permite la gestión automática de entornos, no requiere
configuraciones adicionales para crear y mantener entornos virtuales, por lo que no
necesitas tener instalado Python en el sistema que estés utilizando, uv lo hace de
forma automática.
Utilidades para la gestión de entornos
En el desarrollo de software con Python, la creación de un entorno virtual es una práctica necesaria.
Este proceso consiste en generar una instancia aislada del intérprete de Python, permitiendo que las dependencias de un proyecto específico no interfieran con las bibliotecas globales del sistema ni con otros desarrollos simultáneos. Esta segmentación garantiza la reproducibilidad del código y evita conflictos de versiones.
A continuación, se describen los procedimientos para la gestión de entornos según la herramienta seleccionada:
- Preparación del repositorio: Para acceder a versiones específicas de Python que pueden no estar presentes en los repositorios oficiales de la distribución, se añade el repositorio especializado:
- Instalación del entorno de ejecución: Se procede a instalar la versión deseada
de Python (por ejemplo, la 3.10) junto con los binarios de desarrollo y el gestor de
paquetes
pip: - Despliegue y activación: Se genera la estructura del entorno dentro del directorio del proyecto y se activa para que el intérprete actual apunte a dicha ubicación:
- Instalación inicial: El proceso comienza con la descarga e instalación de la suite desde su portal oficial. En sistemas Windows, se recomienda el uso del Anaconda Prompt para garantizar que las variables de entorno estén correctamente configuradas.
- Gestión de entornos con Conda: A diferencia de otras herramientas, Conda permite
definir la versión de Python de forma explícita durante la creación:
- Activación e interoperabilidad: Una vez activado el entorno, es posible integrar
pipsi una librería no se encuentra en los canales de Conda, aunque se debe proceder con cautela para evitar inconsistencias:
- Configuración del entorno local: Para facilitar la visibilidad y el mantenimiento, es recomendable configurar Poetry de modo que aloje los entornos virtuales dentro de la carpeta raíz del proyecto:
- Inicialización y despliegue: Al crear un nuevo proyecto, la herramienta genera automáticamente la estructura de archivos necesaria y, tras la instalación de dependencias, gestiona la creación del entorno virtual de forma transparente:
- Instalación y configuración inicial: Se instala mediante un script de ejecución
rápida que configura el binario en el sistema:
- Ciclo de vida del proyecto: El flujo de trabajo con
uvpermite inicializar un proyecto y crear su entorno virtual correspondiente con una latencia mínima:
Gestión de la caché
En muchas ocasiones, estos gestores de entorno almacenan en caché la información de los paquetes que instalan, lo que puede llevar a ocupar una gran cantidad de espacio en el disco o incluso generar conflictos cuando tenemos paquetes corruptos. Para liberar espacio o solucionar problemas con dependencias, se puede purgar/eliminar la caché con los siguientes comandos:
Actualización de paquetes
El software evoluciona de forma continua. Los paquetes que se utilizan habitualmente incorporan nuevas funcionalidades o corrigen errores y vulnerabilidades de seguridad en versiones posteriores. Por lo tanto, mantener las dependencias actualizadas es clave para el correcto funcionamiento del proyecto.
-
Actualizar todos los paquetes
Puedes utilizar el siguiente comando para actualizar todos los paquetes:
Donde:
pip freeze: Genera una lista de los paquetes instalados.grep -v "^\-e": Excluye las instalaciones en modo editable.cut -d = -f 1: Extrae solo los nombres de los paquetes, sin las versiones.xargs -n1 pip install -U: Actualiza cada paquete.
-
Actualizar un paquete específico
Para actualizar un paquete específico:
-
Actualizar todos los paquetes
Aunque Anaconda permite la instalación de paquetes con PIP, se recomienda evitar mezclar paquetes del repositorio de Anaconda y PIP, ya que esto podría causar conflictos. Si decides usar paquetes de Anaconda, puedes actualizar todos los paquetes con:
-
Actualizar un paquete específico
Para actualizar un paquete específico:
-
Actualizar todos los paquetes
-
Actualizar un paquete específico
Para actualizar un paquete específico:
Instalación de paquetes desde un archivo de requisitos
Cuando un proyecto necesita dependencias específicas, es útil usar un archivo
requirements.txt. Aunque hoy en día, con sistemas como los que ofrecen los ficheros
toml en uv o Poetry, cada vez lo recomiendo menos, en el caso de que lo necesites,
aquí tienes los pasos a seguir:
-
Crear un archivo
requirements.txtcon los paquetes y versiones deseadas: -
Instalar los paquetes desde el archivo:
Eliminar un entorno
En la mayoría de los casos, los entornos creados con VENV, Poetry y uv se alojan
dentro del propio directorio del proyecto. Por ello, si ya no los necesitas, basta con
eliminar la carpeta correspondiente para borrar por completo el entorno junto con toda
su información.
Integración del entorno con Jupyter
Para utilizar un entorno virtual dentro de Jupyter, es necesario seguir estos pasos:
- Instalar
ipykernelen el entorno: Primero, debes añadiripykernelcomo dependencia dentro del entorno virtual. Para ello, instala el paquete utilizando el gestor de dependencias correspondiente (por ejemplo,pip,poetry,uvoconda). - Registrar el entorno en Jupyter: Este paso es necesario únicamente cuando el entorno virtual se encuentra en un directorio diferente al del proyecto. En la mayoría de los entornos de desarrollo, como VSCode, si el entorno está dentro del directorio del proyecto, se detectará automáticamente y podrás seleccionar el kernel asociado sin pasos adicionales. En caso de que necesites registrar el entorno manualmente, ejecuta:
En el caso de utilizar uv, si has empleado el comando uv venv, por defecto uv
creará un entorno en la raíz del proyecto en la que te encuentras, con la versión de
Python especificada en el pyproject.toml. Con ello, al utilizar Jupyter Notebooks,
VSCode detectará directamente que el entorno se encuentra en la raíz del proyecto sin
necesidad de ejecutar los comandos anteriores.