Virtualenv y venv: explicación de los entornos virtuales de Python

De todas las razones por las que Python es un éxito entre los desarrolladores, una de las más importantes es su amplia y siempre creciente selección de paquetes de terceros. Los prácticos kits de herramientas para todo, desde la ingesta y el formateo de datos hasta las matemáticas de alta velocidad y el aprendizaje automático, están a solo una importo más pip installdistancia.

Pero, ¿qué sucede cuando esos paquetes no funcionan bien entre sí? ¿Qué hace cuando diferentes proyectos de Python necesitan versiones competidoras o incompatibles de los mismos complementos? Ahí es donde entran en juego los entornos virtuales de Python.

Puede crear y trabajar con entornos virtuales tanto en Python 2 como en Python 3, aunque las herramientas son diferentes. Virtualenv es la herramienta elegida para Python 2, mientras que venv maneja la tarea en Python 3. 

¿Qué son los entornos virtuales de Python?

Un entorno virtual es una forma de tener varias instancias paralelas del intérprete de Python, cada una con diferentes conjuntos de paquetes y diferentes configuraciones. Cada entorno virtual contiene una copia discreta del intérprete de Python, incluidas copias de sus utilidades de soporte.

Los paquetes instalados en cada entorno virtual se ven solo en ese entorno virtual y no en otro. Incluso los paquetes grandes y complejos con binarios dependientes de la plataforma se pueden separar entre sí en entornos virtuales.

Hay algunos casos de uso comunes para un entorno virtual:

  1. Está desarrollando varios proyectos que dependen de diferentes versiones de los mismos paquetes, o tiene un proyecto que debe aislarse de ciertos paquetes debido a una colisión de espacios de nombres. Este es el caso de uso más estándar.
  2. Está trabajando en un entorno de Python donde no puede modificar el directorio de paquetes del sitio. Esto puede deberse a que está trabajando en un entorno altamente controlado, como un alojamiento administrado, o en un servidor donde la elección del intérprete (o los paquetes utilizados en él) no se pueden cambiar debido a los requisitos de producción.
  3. Desea experimentar con una combinación específica de paquetes en circunstancias muy controladas, por ejemplo, para probar la compatibilidad cruzada o la retrocompatibilidad.
  4. Desea ejecutar una versión “básica” del intérprete de Python en un sistema sin paquetes de terceros y solo instalar paquetes de terceros para cada proyecto individual según sea necesario.

Nada dice que no pueda simplemente descomprimir una biblioteca de Python en una subcarpeta de un proyecto y usarla de esa manera. Del mismo modo, puede descargar una copia independiente del intérprete de Python, descomprimirlo en una carpeta y usarlo para ejecutar scripts y paquetes dedicados a él.

Pero administrar proyectos tan improvisados ​​pronto se vuelve difícil. Solo parece más fácil hacer eso al principio. Trabajar con paquetes que tienen componentes binarios, o que dependen de elaboradas dependencias de terceros, puede ser una pesadilla. La mejor solución a largo plazo es utilizar los mecanismos nativos de Python para crear y trabajar con entornos virtuales.

Entornos virtuales en Python 3

Virtualenv ha demostrado ser indispensable para innumerables desarrolladores de Python, pero no forma parte de la biblioteca estándar de Python. Python 3 tiene herramientas nativas para entornos virtuales que simplifican todo el proceso.

Vídeo relacionado: Cómo Python facilita la programación

Python, perfecto para TI, simplifica muchos tipos de trabajo, desde la automatización de sistemas hasta el trabajo en campos de vanguardia como el aprendizaje automático.

Crea el entorno virtual

Para crear un entorno virtual en un directorio determinado, escriba:

python3 -m venv /path/to/directory

(Tenga en cuenta que puede usar en  pythonlugar de python3si su sistema lo reconoce pythoncomo el intérprete predeterminado de Python 3).

Todo el proceso de configuración del entorno virtual puede tardar uno o dos minutos. Cuando haya terminado, debería tener un directorio con algunos subdirectorios en él. El subdirectorio más importante está  binen Unix o  Scriptsen Windows, que es donde encontrará la copia del intérprete de Python para el entorno virtual junto con sus utilidades.

Tenga en cuenta que debido a que cada entorno virtual contiene su propia copia del intérprete de Python, puede ser bastante grande. Tanto en Windows como en Linux, un entorno virtual Python 3.6 consumirá alrededor de 23 MB de espacio en disco.

Activar el entorno virtual

Antes de poder utilizar este entorno virtual, debe activarlo explícitamente . La activación convierte al entorno virtual en el intérprete de Python predeterminado durante la sesión.

Deberá utilizar una sintaxis diferente para activar el entorno virtual según el sistema operativo y el shell de comandos que esté utilizando.

  • En Unix o MacOS, usando el shell bash: source /path/to/venv/bin/activate
  • En Unix o MacOS, usando el shell csh: source /path/to/venv/bin/activate.csh
  • En Unix o MacOS, usando la concha de pescado: source /path/to/venv/bin/activate.fish
  • En Windows usando el símbolo del sistema:path\to\venv\Scripts\activate.bat
  • En Windows usando PowerShell: path\to\venv\Scripts\Activate.ps1

Tenga en cuenta que el entorno activado solo funciona para el contexto en el que se activó . Por ejemplo, si lanza dos instancias de PowerShell, A y B, y solo activa el entorno virtual en la instancia A, ese entorno solo se aplicará a A. No se aplicaría en ningún otro lugar.

Configurar y usar el entorno virtual

Una vez que haya activado el nuevo entorno virtual, puede usar el administrador de paquetes pip para agregar y cambiar paquetes. Encontrará pip en el Scriptssubdirectorio del entorno virtual en Windows y en el binsubdirectorio en sistemas operativos Unix.

Si ya está familiarizado con la forma en que funciona pip, está listo. Debería ser igual en un entorno virtual. Solo asegúrese de utilizar la instancia de pip que administra los paquetes para el entorno virtual en el contexto en el que se activó, por ejemplo, la sesión bash o la sesión de Windows CLI / PowerShell. Si desea verificar que está utilizando el pip correcto y el entorno virtual correcto, escriba pip -Vy compruebe que la ruta que muestra apunte a un subdirectorio de su entorno virtual.

Para usar el entorno virtual que creó para ejecutar scripts de Python, simplemente invoque Python desde la línea de comando en el contexto donde lo activó.

Desactivación del entorno virtual

Cuando haya terminado de usar el entorno virtual, puede terminar la sesión en la que lo estaba usando. Si desea continuar trabajando en el entorno pero con el intérprete de Python predeterminado, escriba deactivateen el símbolo del sistema. Los usuarios de Windows en el símbolo del sistema deben ejecutar deactivate.batdesde el Scriptssubdirectorio, pero los usuarios de Unix y los usuarios de Windows que ejecutan PowerShell pueden simplemente escribir deactivateen cualquier directorio.

Eliminar el entorno virtual

Los entornos virtuales son autónomos. Cuando ya no necesite el entorno virtual, simplemente puede eliminar su directorio.

Entornos virtuales en Python 2

Con Python 2, los entornos virtuales no son una característica nativa del lenguaje. En su lugar, debe instalar bibliotecas de terceros para crear y administrar entornos virtuales.

El más popular y ampliamente utilizado de estos proyectos es virtualenv, que se encarga de crear la estructura de directorios y copiar los archivos necesarios en un entorno virtual. Para instalar virtualenv, simplemente use pip install virtualenv. Para crear un directorio de entorno virtual con él, escriba virtualenv /path/to/directory. La activación y desactivación del entorno virtual funciona de la misma manera que para los entornos virtuales en Python 3 (ver más arriba).

Uso de entornos virtuales con cuadernos de Jupyter

Si está utilizando cuadernos de Jupyter (también conocidos como cuadernos de IPython) y ya tiene Jupyter instalado en todo el sistema, cree su entorno virtual y actívelo. Luego, desde el directorio de su entorno virtual, ejecute pip install ipykernelpara agregar los componentes necesarios para IPython. Finalmente, ejecute ipython kernel install —user —name=, donde project_name es un nombre que desea asociar con ese proyecto en particular. Desde allí, debería poder iniciar Jupyter y cambiar al kernel de IPython que instaló dentro del entorno virtual.