Instalación y uso de virtualenv de Python

AdriMcGrady 13/07/2022

Cuando estás desarrollando algo, hay varias tareas relacionadas con el entorno de desarrollo y sus características que suelen ser un quebradero de cabeza bastante importante. Muchas de estas tareas tienen que ver con la posibilidad de tener diferentes entornos donde desarrollar sin afectar a la versión productiva de tu aplicación o con la gestión de dependencias de librerías y versiones de estas. En el caso de Python, virtualenv te ayuda a lidiar con esta problemática.

Virtualenv

virtualenv es una herramienta que te permite crear entornos Python aislados. No tiene grandes requerimientos y es bastante simple. Como se decía en la introducción nos ayudará a resolver bastantes problemas derivados de la gestión de dependencias o como mecanismo para tener varios entornos de desarrollo.

Por ejemplo, podemos nombrar un par de casos de uso:

Imagina que tienes un proyecto en python funcionando de maravilla, pero necesitas actualizar la versión de una librería. Si haces la actualización en el entorno donde está funcionando tu aplicación corres el riesgo de romperla y que no funcione. Pero imagina ahora, que puedes crear un entorno virtual independiente, desplegar tu aplicación, actualizar la librería y probar sin ningún riesgo.

O por poner otro ejemplo, si quieres tener un entorno de desarrollo independiente dentro del mismo sistema donde tienes tu aplicación, puedes generar un virtualevn diferente, desplegar tu aplicación, y hacer todas las pruebas y cambios que necesites sin poner en riesgo la versión productiva. Así como independizar tu desarrollo de librerías de python que también usa tu Sistema Operativo.

Instalación de Virtualenv

virtualenv se puede instalar de varias maneras:

  • Mediante paquetería de tu distribución. El paquete suele llamarse virtualenv:
# Debian/Ubuntu Si el paquete se llama virtualenv
apt install virtualenv

# RedHat/Centos/OracleLinux
yum install virtualenv
  • Si dispones de pipx:
pipx install virtualenv
  • Directamente desde pip:
python -m pip install --user virtualenv

Usando Virtualenv

Sea cual sea el método de instalación elegido, vamos a lo importante: a como crear tu entorno virtual y trabajar con él.

  • Para crear un nuevo entorno virtual usando el interprete python por defecto del sistema.
adrimcgrady@nanopifire3:~/python/virtualenvs$ virtualenv venv-ejemplo
created virtual environment CPython3.8.10.final.0-64 in 661ms
  creator CPython3Posix(dest=/home/adrimcgrady/python/virtualenvs/venv-ejemplo, clear=False, global=False)
  seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, pkg_resources=latest, via=copy, app_data_dir=/home/adrimcgrady/.local/share/virtualenv/seed-app-data/v1.0.1.debian.1)
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
  • Para crear un nuevo entorno virtual usando un interprete python personalizado.
adrimcgrady@nanopifire3:~/python/virtualenvs$ virtualenv -p /path/a/tu/python venv-ejemplo
  • Activar tu virtualenv:
adrimcgrady@nanopifire3:~/python/virtualenvs$ source venv-ejemplo/bin/activate
(venv-ejemplo) adrimcgrady@nanopifire3:~/python/virtualenvs$
  • Ahora ya puedes instalar una librería en ese virtualenv.
venv-ejemplo) adrimcgrady@nanopifire3:~/python/virtualenvs$ pip install cowsay
Collecting cowsay
  Downloading cowsay-5.0.tar.gz (25 kB)
Building wheels for collected packages: cowsay
  Building wheel for cowsay (setup.py) ... done
  Created wheel for cowsay: filename=cowsay-5.0-py2.py3-none-any.whl size=25707 sha256=4a2f91d17b7de2dc18f8b010af907b056b99573e3af866b87d3eae0c9d067a81
  Stored in directory: /home/adrimcgrady/.cache/pip/wheels/64/ae/fe/f16b584bc50cebd8fc7eb1fa69e96abf8b9024114517874952
Successfully built cowsay
Installing collected packages: cowsay
Successfully installed cowsay-5.0
  • Y ahora ya podemos usar cowsay en nuestro virtualenv.
(venv-ejemplo) adrimcgrady@nanopifire3:~/python/virtualenvs$ python
Python 3.8.10 (default, Jun  2 2021, 10:49:15) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cowsay
>>> cowsay.cow('Muuuuuuuu')
  _________
| Muuuuuuuu |
  =========
         \
          \
            ^__^
            (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
  • Cuando quieras desactivar tu entorno virtual solo tienes que usar la orden deactivate:
(venv-ejemplo) adrimcgrady@nanopifire3:~/python/virtualenvs$ deactivate
adrimcgrady@nanopifire3:~/python/virtualenvs$
  • Hemos salido de nuestro entorno virtual, pero continúa ahí para cuando lo queramos usar. Pero, ahora vamos a comprobar que, efectivamente, cowsay no está instalado en el entorno python por defecto.
adrimcgrady@nanopifire3:~/python/virtualenvs$ python
Python 3.8.10 (default, Jun  2 2021, 10:49:15) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cowsay
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'cowsay'
>>>
  • Por último si queremos borrar un entorno virtual será tan simple como borrar el directorio donde lo creamos. Por ejemplo:
adrimcgrady@nanopifire3:~/python/virtualenvs$ rm -rf venv-ejemplo
Enlaces de interés:

Artículo anterior

Artículos relacionados: