Python: 6 herramientas para gestionar entornos virtuales

Mantén tus dependencias sin conflictos usando entornos virtuales de forma elegante y eficiente.

Python es considerado uno de los lenguajes de programación más versátiles y sencillos en la actualidad.

Una gran parte de este mérito puede atribuirse a su amplia comunidad, que ha logrado con el desarrollo de librerías y aplicaciones de terceros que prácticamente cualquier problema que se te pueda presentar esté total o parcialmente resuelto de entrada.

Para que esto sea posible se requiere de una gestión eficiente de paquetes, de lo que se encarga pip de un modo muy simple.

El problema comienza cuando tenemos 2 aplicaciones para las que necesitamos versiones diferentes de la misma librería por algún motivo de compatibilidad. Cuando instalamos uno de los paquetes e intentamos instalar el otro pip desinstala el anterior automáticamente para actualizarlo.

Para resolver este problema surgen las herramientas para gestionar entornos virtuales, los que estaremos analizando en el artículo de hoy.

¿Qué es un entorno virtual?

Un entorno virtual es básicamente un árbol de directorios en el que el intérprete de Python y sus paquetes se almacenan formando un ecosistema aislado del ecosistema global de Python instalado en tu ordenador y de otros entornos virtuales.

De este modo es posible crear tantos entornos virtuales como necesites, por lo general uno por cada aplicación. Para instalar paquetes aislados del resto solo debes activar el entorno virtual y utilizar pip normalmente.

Veamos a continuación algunas de las principales herramientas para gestionar entornos virtuales en Python.

▶️ Te puede interesar: Creación de un bot para Telegram paso a paso

Venv

Comencemos por la herramienta que actualmente viene por defecto en las instalaciones de Python, venv.

Para crear un entorno virtual con esta herramienta nos debemos trasladar al directorio donde deseemos que sea padre de nuestro entorno virtual y ejecutar el comando:

python -m venv <nombre_entorno>

Venv destaca por trabajar con entornos livianos, donde por defecto los nuevos se crean sobre la base de la instalación de Python sin que se puedan acceder a los paquetes instalados globalmente, pero pueden ser integrados si es una ventaja para tu sistema mediante los argumentos del comando principal.

Argumentos:

Opciones de venv

-h: Muestra la ayuda de la herramienta.

–system-site-packages: Posibilita que se pueda acceder desde el entorno virtual a los paquetes instalados globalmente.

–symlinks: Permite crear enlaces simbólicos a los ejecutables globales en lugar de copiarlos nuevamente al entorno virtual.

–copies: Lo contrario a symlinks, copia los ejecutables en lugar de hacerles un enlace simbólico.

-clear: Elimina el contenido del directorio destino en caso de existir.

–upgrade: Se utiliza generalmente cuando se actualiza la versión de Python y mediante el upgrade se lleva el entorno a la nueva versión.

–without-pip: Obvia la instalación de pip en el entorno virtual.

Virtualenv

Herramientas para gestionar entornos virtuales. Virtualenv

Otra de las herramientas para gestionar entornos virtuales más utilizadas es virtualenv. La misma destaca por ser una solución más completa que venv, debido a que proporciona muchas más opciones para su manejo. Por ejemplo:

virtualenv Python: 6 herramientas para gestionar entornos virtuales
  • Permite especificar que un entorno virtual estará funcionando en modo solo lectura y en caso de cualquier intento de modificación de los paquetes que contiene acabará lanzando un error.
  • Permite establecer un directorio como cache denominado app-data.
  • Varios métodos de búsqueda del intérprete de Python.
  • Puede ser actualizado con pip.
  • Todas las opciones antes mencionadas de venv.

A partir de Python 3.3, el módulo por defecto para el manejo de entornos virtuales integró varias de las características de virtualenv, pero aún se queda por debajo porque su enfoque es la simplicidad.

Puedes instalar virtualenv mediante pip normalmente, utilizando el comando:

pip install virtualenv

Puedes revisar todas las bondades que ofrece esta herramienta para gestionar entornos virtuales y decidir si para ti merece la pena el cambio desde venv.

Python Environment Wrapper (pew)

Pew es un conjunto de comandos para gestionar múltiples entornos virtuales con elegancia.

Esto significa que tendrás comandos para casi todas las tareas que se te puedan ocurrir con entornos virtuales y solo deberás recordar la entrada: pew. Veamos:

pew Python: 6 herramientas para gestionar entornos virtuales

Analicemos algunas de las bondades de los comandos que vemos en la imagen:

  • Con cp podemos duplicar un entorno virtual.
  • Podemos correr un comando en uno o varios entornos virtuales utilizando in o inall.
  • Listar todos los entornos virtuales con ls.
  • Crear, renombrar, restaurar y eliminar entornos virtuales.
  • Mostrar el contenido de un entorno virtual con show o lssitepackages.
  • Mostar o cambiar de entorno virtual con workon.

Como puedes observar, es una opción a más alto nivel que las que vimos anteriormente.

Particularmente me gusta que los entornos virtuales se almacenen juntos por defecto y se gestionen de forma global. Con venv y virtualenv es como si existieran individualmente pero no percibo una sensación de control total.

Te recomiendo que revises a detalle la documentación de pew para que analices todas las ventajas que puede brindarte, ya que lo mostrado en este artículo fue solo un breve bosquejo.

▶️ Te puede interesar: Github Copilot: guía básica para desarrolladores

Pipenv

Herramientas para gestionar entornos virtuales. Pipenv

Continuamos con uno de mis favoritas, Pipenv, una herramienta que tiene como objetivo ofrecerte una buena experiencia tomando lo mejor de los gestores de dependencias de varias tecnologías como composer de PHP, npm de NodeJS, etc.

Con esta herramienta puedes olvidar el uso de pip por separado, ya que lo integra en su gestión de los entornos virtuales, sustituyéndolo por sus propios comandos.

Dichos comandos funcionan como una capa de abstracción de nivel superior con operaciones como las siguientes:

pipenv Python: 6 herramientas para gestionar entornos virtuales

De este modo, si tenemos varias versiones de Python en nuestro ordenador y queremos crear un entorno virtual con una de ellas podemos simplemente ejecutar el comando:

pipenv –python <versión>

Podemos entrar en el entorno virtual mediante el comando:

pipenv shell

Instalar paquetes sin utilizar pip, mediante su similar:

pipenv install <paquete>

Pipenv usa Pipfile y Pipfile.lock como una forma superior de manejar los requerimientos, los cuales siempre podrás generar con el comando:

pipenv requirements

Adicionalmente, pipenv es capaz de exponer problemas de seguridad en tus paquetes mediante el uso y análisis de hashes.

Y una de las funcionalidades que más me atrae es la posibilidad de ver las dependencias de cada paquete mediante el comando:

pipenv graph

Los entornos virtuales se localizarán por defecto en el directorio .virtualenvs como un modo de ganar en organización.

Para cambiar entre ellos solo debes entrar en la carpeta del proyecto y ejecutar el comando pipenv shell.

Te recomiendo que instales cuanto antes esta herramienta para gestionar entornos virtuales de un modo muy sencillo e intuitivo. Si aun no te has convencido puedes pasar a revisar su página oficial y analizar los ejemplos que proponen.

Web Oficial: https://pipenv-es.readthedocs.io/es/latest/

Poetry

Herramientas para gestionar entornos virtuales. Poetry

Seguimos con Poetry, un gestor de dependencias muy potente que es capaz como Pipenv de gestionar entornos virtuales, aunque esa no sea su principal razón de existir.

Como Pipenv, Poetry por defecto almacena los entornos virtuales en un mismo directorio para mantener el orden y el proceso de identificación y acceso a ellos sea trivial. No obstante, es posible cambiar este comportamiento si quieres mantener tu entorno junto al proyecto mediante el siguiente comando:

poetry config virtualenvs.in-project true

Veamos las opciones que nos brinda:

poetry1 Python: 6 herramientas para gestionar entornos virtuales
poetry2 Python: 6 herramientas para gestionar entornos virtuales

Con el comando poetry accedemos a la herramienta y como ves se te despliega una lista de comandos bastante grande. Veamos algunos de ellos.

Para crear un nuevo proyecto con Poetry debemos utilizar el comando:

poetry new <nombre>

Este comando crea un directorio con algunos archivos básicos. Podemos movernos a ese directorio en consola y continuar.

De manera similar a Pipenv, si queremos entrar a nuestro entorno virtual podemos utilizar el comando poetry shell dentro del directorio principal del proyecto. En caso de no existir un entorno virtual el mismo procederá a crearse.

Para instalar los paquetes ya no utilizaremos pip, sino el comando poetry add <paquete> o simplemente poetry install <paquete>.

Una de las ventajas que nos trae poetry respecto a los métodos tradicionales de manejar entornos virtuales es la posibilidad de reubicarlos. Generalmente los entornos virtuales vienen ligados a una ruta y si necesitamos moverlo de lugar nos trae problemas.

Con Poetry, nos desligamos de la ruta y podemos utilizar un entorno virtual simplemente ejecutando el comando: poetry env use <directorio>

Además, es posible cambiar la versión de Python en cualquier momento con el comando: poetry env use <python_version>

Una de las tareas que casi todos hemos hecho es depurar las dependencias y separarlas en archivos separados para desarrollo, producción y pruebas. Poetry hace de esta tarea algo trivial a través de sus comandos con las banderas -D para desarrollo o –no_dev para producción.

Si te ha interesado lo que has leído hasta ahora de esta herramienta te recomiendo que visites su web oficial para consultar su documentación, lo expuesto en el artículo fue solo el inicio de las bondades que brinda.

Web Oficial: https://python-poetry.org/

Conda

Herramientas para gestionar entornos virtuales. Conda

Por último, les presento a Conda, que es a la vez un sistema de gestión de paquetes y de entornos de código abierto compatible con varios lenguajes de programación como Python, R, Ruby, Java, Javascript, C, C++, Fortran entre otros.

Esta herramienta ha tomado protagonismo en los últimos años con el desarrollo de la inteligencia artificial y el machine learning gracias a Anaconda, un sistema creado para facilitarle el trabajo de instalar la enorme cantidad de paquetes que necesitan habitualmente los científicos de datos.

Si quieres un ecosistema completo con más de 150 000 paquetes de análisis y procesamiento de datos instalado por defecto te recomiendo que descargues Ananconda. Si prefieres algo más ligero puedes probar Miniconda, que viene por defecto sin los paquetes y puedes insta a medida que los vayas necesitando. Ambos utilizan conda como herramienta para gestionar entornos virtuales y paquetes.

Veamos las opciones que nos brinda Conda:

conda Python: 6 herramientas para gestionar entornos virtuales

Como puedes observar, tenemos algo muy parecido a las opciones de pipenv para gestionar paquetes sin pip unido al manejo de los entornos virtuales para separar las dependencias entre proyectos evitando conflictos.

Si tu área de desarrollo es la inteligencia artificial o la minería de datos, creo que debes revisar la documentación de esta herramienta. Sobre todo, como base de las grandes que la utilizan, Anaconda y Miniconda. Te dejo el enlace de su web oficial.

Web Oficial: https://docs.conda.io/en/latest/

Nota: Todas las herramientas que hemos presentado son gratuitas y pueden ser descargadas libremente y utilizadas en cualquier proyecto.

En lo personal, me gusta utilizar Pipenv para mis proyectos porque me parece bastante sencillo y potente, y se ajusta perfectamente a mis necesidades. No obstante, considero que Poetry y Conda han ganado mucho terreno y serían mi elección bajo determinadas circunstancias.

De este modo concluimos nuestra selección de herramientas para gestionar entornos virtuales y dependencias de paquetes, esperando que te haya resultado útil la información compartida.

▶️ Te puede interesar: Jupyter Notebook: la forma más sencilla de compartir y documentar tu código

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.