Entornos virtuales

Entornos virtuales

Cuando trabajamos —o jugamos— con muchas aplicaciones hechas en Python es recomendable crear entornos virtuales (virtualenv o venv). De esta forma podemos estar seguros de que no habrá choques entre diferentes versiones que terminen rompiendo nuestro host. En este post veremos lo que son estos entornos virtuales y cómo crearlos.


¿Qué son los entornos virtuales?

Cuando trabajamos con Python, especialmente en proyectos que dependen de paquetes externos (como frameworks, librerías de hacking, análisis de datos etc.), es muy fácil que las cosas se desordenen. A medida que instalamos más herramientas con pip, nuestro sistema se llena de versiones diferentes de paquetes y en algún momento estas versiones chocarán entre sí.

Pongamos un ejemplo simple: Nuestro sistema Kali Linux tiene instalado en el global la versión 3.13 de Python pero queremos trabajar con herramientas escritas en diferentes versiones. La herramienta A fue escrita en Python 2.7 mientras que la herramienta B fue escrita en Python 3.11.

Lo que podemos hacer para usar estas herramientas evitando conflictos entre las diferentes versiones es crear un par de entornos virtuales que aíslen las librerías, versiones y dependencias de cada herramienta. Así, cuando activemos un determinado entornos virtual, cada herramienta usará únicamente lo que hayamos instalado en su venv.

Veamos cómo quedaría el directorio con los entornos virtuales para cada proyecto. En mi caso la ruta es: /home/knibal/Hacking/Tools/

/home/knibal/Hacking/Tools/
├── ToolA/         ← Repositorio de la herramienta en Python 2.7
├── ToolB/         ← Repositorio en Python 3.11
├── venv_toola/    ← Entorno virtual con Python 2.7
└── venv_toolb/    ← Entorno virtual con Python 3.11

En nuestro directorio Tools tenemos los repositorios que queremos usar. Dentro del mismo directorio Tools tenemos también los entornos virtuales para cada versión de Python: la 2.7 y la 3.11. Así, no pondremos en riesgo la estabilidad de la versión global del sistema que es la 3.13.


Creación de entornos virtuales.

Crear entornos virtuales para nuestros proyectos es muy sencillo. Todo lo haremos a través de la línea de comandos (CLI). Los siguientes ejemplos servirán para distribuciones GNU/Linux de base Debian. Para este caso se hizo en Kali Linux y tomando como ejemplo la necesidad de crear un entorno para Python v. 3.11.

Yo lo haré en la ruta /home/knibal/Hacking/Tools/. Cada uno de ustedes cambiará los datos según sea el caso. Lo primero que haremos será actualizar nuestro sistema e instalar lo necesario:

sudo apt update
sudo apt install python3-venv

python3-venv es el paquete que habilita la capacidad de crear entornos virtuales usando el módulo venv. Este módulo venv contiene los scripts y archivos necesarios para crear una carpeta que contiene: una copia local del intérprete de Python, su propio pip (el gestor oficial de paquetes) y sus propias librerías (aisladas del sistema).

Con venv en nuestro sistema ya podemos crear nuestro entorno virtual. Yo no quiero instalar Python 3.11 en mi sistema global. No quiero que exista paralelo a mi versión global 3.13. Lo que deseo es que la versión 3.11 se instale únicamente en el entorno virtual. Lo que debo hacer es lo siguiente:

mkdir -p ~/python-src
cd ~/python-src
wget https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tgz
tar -xzf Python-3.11.9.tgz
cd Python-3.11.9

Esto descargará el código fuente de Python 3.11.9 al directorio recién creado. Cada uno reemplazará el código con las versiones de Python que desea instalar para sus entornos virtuales. El siguiente paso será:

./configure --prefix=/home/knibal/python311 --enable-optimizations --with-ensurepip=install
make -j$(nproc)
make install

Con el paso anterior instalamos Python 3.11 únicamente en el directorio: /home/knibal/python311, sin tocar la versión 3.13 que tenemos en el sistema. Ahora podemos crear nuestro entorno virtual para esa versión específica:

/home/knibal/python311/bin/python3.11 -m venv /home/knibal/Hacking/Tools/venv-py311

El entorno virtual fue creado en el directorio donde clonaremos los repositorios que queremos usar. En mi caso se trata de /home/knibal/Hacking/Tools/ Ahora podremos activar nuestro entorno virtual con la orden:

source /home/knibal/Hacking/Tools/venv-py311/bin/activate

Si todo está bien ahora nuestro prompt deberá verse como:

(venv) kali@kali:~$

Mientras el entorno virtual esté activado todo lo que hagamos en él quedará aislado del host. Si por ejemplo instalamos unos requerimientos con pip install -r requirements.txt esas versiones instaladas solo podrán usarse dentro del entorno aislado.

Si ya terminamos de usar una herramienta y queremos salir del venv debemos desactivar el entorno virtual con el comando:

deactivate

Si revisamos la versión de Python que estamos usando con el entorno virtual activado y después lo hacemos con el entorno virtual desactivado veremos que son versiones diferentes. En la siguiente imagen podemos ver la diferencia:


Entornos virtuales


Con el entorno virtual activado vemos que estamos usando la versión 3.11.9, la versión aislada. Con el entorno virtual desactivado vemos que estamos usando la versión 3.13.7, la versión actual del sistema. Esto podemos hacerlo para diferentes versiones y así garantizamos la estabilidad de nuestro host al no causarle incompatibilidades innecesarias.

Si me quedó algún error en el post me lo dispensan. Recuerden que no soy un programador de oficio sino un simple aficionado. Espero les sirva. Hasta la próxima.

Temas: G33ks, GNU / Linux
J. Inversor

Escrito por:J. Inversor Otros posts del autor

Hackear es un acto noble y altruista porque trae a la existencia la multiplicidad inagotable de todos los códigos, sean naturales, sociales, computacionales o poéticos.