Entorno Virtual en Python

El desarrollo de un proyecto en python involucra la creación de un entorno virtual con el que se pueden mantener las versiones de las librerías, frameworks, etc. y aislar el entorno de las dependencias de proyectos diferentes. Crear el entorno virtual en uno de lo pasos esenciales para iniciar o continuar con proyecto en Python en un entorno de desarrollo o de producción.

Para poder gestionar la instalación de los paquetes y del ambiente virtual para Python es necesario instalar pip o easy_install. No enfocaremos en pip y con éste podremos instalar el resto de los paquetes, librerías y dependencias de python.

Para instalar pip en Linux puede utilizar uno de los siguientes comandos:

Ubuntu / Debian

sudo apt install python3-pip

Centos/Redhat

sudo yum install epel-release
sudo yum install python-pip

Arch Linux / Manjaro

pacman -S python-pip

openSUSE / SUSE Linux Enterprise Server

zypper install python3-pip 

Una vez instalado PIP (Package Installer for Python) podrás instalar los elementos necesarios para instalar y gestionar paquetes de Python. Usaremos esta herramienta para instalar el paquete virtualenv utilizando el siguiente comando:

sudo pip install virtualenv

Si utilizas una distro diferente a Ubuntu asegúrate de estar como usuario root o con privilegios de superusuario y remueve la palabra sudo.

Crear el ambiente virtual

Cuando creamos un ambiente virtual podemos instalar paquetes de python y cuando se llama algunos de esos paquete o librerías se ejecutan las versiones que se han instalado dentro del ambiente, es decir se puede tener múltiples ambientes con diferente versiones de la misma librería o paquete y al ejecutarlos se respetarán esas versiones, es decir que cada ambiente virtual es independiente de otro o del mismo sistema operativo.

Para crear un ambiente virtual solo es necesario ubicarse en el directorio donde queramos crear el ambiente virtual, digamos, en el directorio del proyecto a desarrollar o a trabajar. Si no existiera ese directorio es necesario crearlo. Por ejemplo crearemos el directorio ‘mi_proyecto’ y dentro de el crearemos el ambiente virtual de python con estos comandos:

cd ~
mkdir mi_proyecto
virtualenv env

Con esto crearemos el ambiente virtual identificado como ‘env’, tu lo puedes llamar como tu quieras, puede ser por ejemplo env_mi_proyecto o llamarlo como el mismo directorio. Una vez creado lo puedes activar llamando el comando source y la ruta nombre_del_ambiente/bin/activate para este ejemplo seria:

cd ~/mi_proyecto
source env/bin/activate

Si todo ha funcionado como debe ser verás el entorno virtual activado cuando en al inicio del promt aparezca en nombre del ambiente entre parentecis. Aquí te muestro una salida de ejemlo:

$ mkdir mi_proyecto
$ cd mi_proyecto/
~/mi_proyecto$ 

~/mi_proyecto$ virtualenv env
Using base prefix '/usr'
New python executable in /home/vagrant/mi_proyecto/env/bin/python3
Also creating executable in /home/vagrant/mi_proyecto/env/bin/python
Installing setuptools, pip, wheel…
done.

~/mi_proyecto$ source env/bin/activate
(env) ~/mi_proyecto$ 

Como puedes ver en la última linea del texto anterior al principio aparece ‘(env)’ esto nos indica que el ambiente virtual de python está activado.

Para desactivar el un ambiente virtual solo debes teclear el comando deactivate.

(env) ~/mi_proyecto$ deactivate
~/mi_proyecto$

Validar que el ambiente virtual de python esté funcionando podemos activarlo y verificar la ruta de donde se está ejecutando, por ejemplo, el mismo python esté dentro del ambiente virtual y no de la ruta global del sistema.

~/mi_proyecto$ which python3
/usr/bin/python3

~/mi_proyecto$ source env/bin/activate
(env) ~/mi_proyecto$ which python3
/home/vagrant/mi_proyecto/env/bin/python3

Este es un mero ejemplo en Ubuntu para probar Python3, pero se puede hacer la misma prueba con python2 o python dependiendo de la versión que manejes y la distribución Linux que estés usando.

virtualenvwraper

virtualenvwraper es un conjunto de extensiones para la herramienta virtualenv. Las extensiones incluyen utilerías (llamados wrapers o envolturas) para crear y eliminar entornos virtuales, administrar el flujo de trabajo al desarrollar y facilitar el trabajo si tienes más de un proyecto a la vez sin introducir conflictos en sus respectivas dependencias.

Para instalar virtualwraper podemos utilizar de nuevo PIP con el siguiente comando:

sudo pip install virtualenvwrapper

Usar virtualenv sin virtualenvwrapper es un poco laborioso porque cada vez que queremos activar un entorno virtual, tenemos que escribir un comando largo como este:

source ~/mi_proyecto/env/bin/activate

Pero si tenemos virtualenvwraper el comando que necesitamos puede ser mas sencillo y corto. Por ejemplo podríamos usar:

workon mi_proyecto

Pero esto aun no funciona, primero tenemos que ejecutar el script virtualenvwrapper.sh y realizar algunas configuraciones. Para hacerlo necesitamos crear una variable de entorno del shell llamada WORKON_HOME y para hacerlo puedes editar el archivo .bash_rc y agregar ‘ export WORKON_HOME=~/Envs’ sin las comillas o puedes ejecutar el siguiente comando:

echo 'export WORKON_HOME=~/Envs' >> ~/.bashrc

En este comando lo que indicamos es que el directorio para guardar los ambientes virtuales de python es ~/Envs, este directorio puede ser llamado como tu quieras, es solo un nombre para que sea fácil identificar que se almacena en este. Ahora vamos a crear el directorio

mkdir  ~/Envs

Es necesario cargar de nuevo el entorno para que la variable esté presente y validar que apunte al directorio recién creado. Puedes cerrar y abrir la terminal, o cerrar la sesión ssh y volver a conectarte para que se cargue el entorno de nuevo, sino quieres hacer esto también puedes recargar el entorno con el comando

source ~/.bashrc

Y luego cambiar al directorio mediante la varialbe $WORKON_HOME

cd $WORKON_HOME
pwd

Si te muestra la ruta de tu directorio por ejemplo /home/vagrant/Envs todo está correcto, pero si recibes un mensaje de «el directorio no existe» o «No such file or directory» vuelve a revisar la configuración y asegúrate de corregir algo que no se configuró como se dice en los pasos anteriores.

El siguiente paso es ejecutar el script virtualenvwraper.sh

source /usr/local/bin/virtualenvwrapper.sh

También es necesario agregar este script al archivo .bashrc para que esté disponible cuando se requiera, así cada vez que abras la terminal o inicies una sesión de bash el virtualwenvwraper estará disponible.

echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc

Ahora es posible crear un ambiente virtual con el comando:

mkvirtualenv env2

Es importante hacer notar que ahora ya no es importante en que carpeta o directorio se esté al momento de crear el ambiente virtual ya que toda la información de los ambientes se guarda en el directorio ~/Envs o el que hayas configurado. Y puedes crear tantos ambientes virtuales como necesites.

Para activar un ambiente virtual crearo con el comando anterior solo es necesario teclear:

workon env2

Aquí una salida del como se crea el ambiente virtual env2 y se obtiene el identificador (env2) en el promt al momento de activarlo.

~$ mkvirtualenv env2
Using base prefix '/usr'
New python executable in /home/vagrant/Envs/env2/bin/python3
Also creating executable in /home/vagrant/Envs/env2/bin/python
Installing setuptools, pip, wheel…
done.
virtualenvwrapper.user_scripts creating /home/vagrant/Envs/env2/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/vagrant/Envs/env2/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/vagrant/Envs/env2/bin/preactivate
virtualenvwrapper.user_scripts creating /home/vagrant/Envs/env2/bin/postactivate
virtualenvwrapper.user_scripts creating /home/vagrant/Envs/env2/bin/get_env_details
(env2) ~$ workon env2
(env2) ~$
(env2) ~$ which python
/home/vagrant/Envs/env2/bin/python
(env2) ~$

Una opción que te puede facilitar la vida es que al activar el ambiente virtual te posicione en la ruta de tu proyecto de forma automática. Para hacer esto solo tienes que agregar al final del script activate el comando cd con la ruta adecuada. Por ejemplo si mi proyecto está en /home/vagrant/mi_proyecto este comando agregará esta instrucción al final del archivo

echo "cd  /home/vagrant/mi_proyecto" >> /home/vagrant/Envs/env2/bin/activate

Y al activar el ambiente virtual te posicionará en el directorio indicado. Aquí un ejamplo de la salida.

~$ pwd
/home/vagrant

~$ workon env2
(env2) ~/mi_proyecto$ pwd
/home/vagrant/mi_proyecto
(env2) ~/mi_proyecto$

Espero que con este post puedas crear, gestionar y trabajar de manera mas fácil con los ambiente virtuales de Python, a mi me tomó algún tiempo entenderlos y pode aprovechar todo el potencial que tienen cuando trabajas con varios proyectos o cuando implementas varias aplicaciones web en un mismo server y tienen dependencias diferentes.

This entry was posted in Python and tagged , , , . Bookmark the permalink.

Deja una respuesta

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


*