Este artículo mostrará la instalación, configuración y un análisis completo de todas las posibilidades de uso de las utilidades venv y virtualenv para Python. Pero comenzaremos con algunas preguntas generales.
Durante el desarrollo de aplicaciones en Python, pueden surgir problemas relacionados con el uso de diferentes versiones de bibliotecas. Por ejemplo, dos aplicaciones diferentes pueden necesitar la misma biblioteca, pero de diferentes versiones. O puede que necesites asegurar el funcionamiento correcto de una aplicación independientemente de las actualizaciones de la versión de la biblioteca que utiliza.
Para solucionar estos problemas, los desarrolladores idearon una forma interesante: ejecutar cada aplicación con su propio conjunto de versiones de bibliotecas en entornos aislados. De esta manera, un entorno virtual (virtual environment) en Python permite gestionar proyectos de forma aislada:
- Cada proyecto puede tener sus propias dependencias.
- Las dependencias de un proyecto no afectan a las dependencias de otro proyecto.
Puedes crear entornos virtuales en Python usando diferentes utilidades. Hoy hablaremos de venv y virtualenv.
Trabajo con venv
Para crear un entorno virtual, usamos el módulo venv. Es una herramienta útil para gestionar dependencias y aislar proyectos, que está integrada en Python desde la versión 3.3+. Por lo tanto, el módulo venv no se puede usar para aislar programas Python 2.
Creación de un proyecto
Empecemos creando un proyecto. Primero, crea una carpeta para el proyecto y accede a ella. En Linux, puedes hacerlo con estos comandos:
mkdir my_python_project
cd my_python_project
Reemplaza my_python_project
con el nombre deseado para tu proyecto.
Creación del entorno virtual
Ahora, crea un entorno virtual en esta carpeta:
python3 -m venv project_name_myproject
Reemplaza project_name_myproject
con el nombre deseado para tu entorno virtual.
Si te encuentras con este error:
The virtual environment was not created successfully because ensurepip is not
available. On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.
apt-get install python3-venv
You may need to use sudo with that command. After installing the python3-venv
package, recreate your virtual environment.
Failing command: ['/home/osboxes/my_python_project/project_name_myproject/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']
Necesitas instalar venv. Por ejemplo, en Ubuntu, debes ejecutar este comando:
sudo apt-get install python3-venv -y
Después, repite el comando de creación del entorno virtual de Python que se mostró al principio de esta sección.
Activación del entorno virtual
Para activar el entorno virtual, usa este comando:
source project_name_myproject/bin/activate
Reemplaza project_name_myproject
con el nombre del entorno virtual que creaste en el paso anterior.
Si usas Windows y tienes Python y pip correctamente instalados, puedes activar el entorno virtual con este comando:
project_name_myproject/Scripts/activate
Reemplaza project_name_myproject
con el nombre del entorno virtual que creaste en el paso anterior.
Comprobación de los paquetes instalados
Ahora, comprueba los paquetes pip instalados dentro del entorno virtual:
pip3 list
La salida debería ser similar a esta:
Package Version
------------- -------
pip 20.3.4
pkg-resources 0.0.0
setuptools 44.1.1
Como puedes ver, dentro del entorno virtual no hay ninguna biblioteca pip externa instalada. Puedes instalar un paquete, por ejemplo, el módulo requests:
pip3 install requests
Ahora, comprueba de nuevo la lista de paquetes pip instalados dentro del entorno virtual:
pip3 list
En la salida debería aparecer el paquete que acabas de instalar:
Package Version
------------- ---------
certifi 2021.5.30
chardet 4.0.0
idna 2.10
pip 20.3.4
pkg-resources 0.0.0
requests 2.25.1
setuptools 44.1.1
urllib3 1.26.5
Salida del entorno virtual
Para salir del entorno virtual, ejecuta este comando:
deactivate
Si después de salir compruebas de nuevo la lista de paquetes instalados, obtendrás una salida diferente:
Package Version
---------------------- -------------
apturl 0.5.2
bcrypt 3.1.7
blinker 1.4
Brlapi 0.8.2
certifi 2020.6.20
chardet 4.0.0
chrome-gnome-shell 0.0.0
click 7.1.2
colorama 0.4.4
command-not-found 0.3
cryptography 3.3.2
Traslado de los paquetes instalados
Para trasladar los paquetes instalados a otro entorno en Linux, puedes usar este sencillo comando:
python3 -m pip freeze > requirements.txt
Esto creará un archivo requirements.txt
que contendrá la lista de todos los paquetes instalados.
Importación de paquetes a otro entorno
Ahora puedes ir a otro entorno virtual e importar los paquetes con este comando:
pip3 install -r requirements.txt
Trabajo con virtualenv
La utilidad virtualenv es la herramienta más popular para crear entornos aislados en Python. Crea una carpeta que contiene todos los archivos ejecutables necesarios para usar los paquetes que necesitará el proyecto Python. A diferencia del módulo venv, esta utilidad se puede usar tanto en Python 3 como en la versión 2.7.
Instalación de virtualenv y creación de un entorno virtual
Para instalar la utilidad virtualenv, usa pip:
pip install virtualenv
La creación de un entorno virtual con virtualenv se realiza así:
cd project_folder
virtualenv myproject
virtualenv myproject
creará una carpeta en el directorio actual. Contendrá los archivos ejecutables de Python y una copia de la biblioteca pip, que puedes usar para instalar otros paquetes. El nombre del entorno virtual (en este caso, myproject
) puede ser cualquiera. Si no se especifica un nombre, los archivos se colocarán en el directorio actual. De esta manera se crea una copia de Python en cualquier directorio donde hayas ejecutado el comando, colocándola en una carpeta con el nombre myproject
.
También puedes usar el intérprete de Python que prefieras. Ejemplo usando python 2.7:
virtualenv -p /usr/bin/python2.7 myproject
Para la versión python 3.7:
virtualenv -p /usr/bin/python3.7 myproject
El intérprete se puede cambiar globalmente usando la variable env en ~/.bashrc:
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.7
Puedes comprobar la versión de Python y pip con estos comandos:
python --version
pip --version
Trabajo con virtualenvwrapper
Hemos visto las funciones básicas de virtualenv. Ahora veamos cómo realizar operaciones más complejas, como copiar entornos virtuales.
La forma más sencilla de gestionar virtualenv es usar virtualenvwrapper. Es una utilidad que permite almacenar todos los proyectos aislados en un solo lugar, así como crearlos, copiarlos y eliminarlos. Además, virtualenvwrapper permite cambiar fácilmente entre entornos aislados.
Instalación de virtualenvwrapper
La utilidad virtualenvwrapper no se incluye con virtualenv, por lo que para instalarla en Linux debes ejecutar estos comandos:
sudo pip3 install virtualenvwrapper
echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.bashrc
echo "export PROJECT_HOME=$HOME/Devel" >> ~/.bashrc
echo "export VIRTUALENVWRAPPER_PYTHON='/usr/bin/python3'" >> ~/.bashrc
echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc
source ~/.bashrc
Si usas Windows y tienes Python y pip correctamente instalados, puedes instalar virtualenvwrapper con este comando:
pip install virtualenvwrapper-win
Si durante la instalación te aparece una advertencia amarilla indicando que la ubicación de los scripts instalados no se encuentra en la variable de entorno PATH, deberás añadir la ubicación indicada en el mensaje a PATH.
Importante: ¡ejecuta el siguiente comando solo en cmd!
setx path "%path%;C:\Users\storm\AppData\Roaming\Python\Python39\Scripts"
Reemplaza C:\Users\storm\AppData\Roaming\Python\Python39\Scripts
con la ubicación indicada en la advertencia.
Creación de un entorno virtual
Para empezar a usar virtualenvwrapper, crea un nuevo entorno virtual. Puedes hacerlo así:
mkvirtualenv new-project
Después de crear el entorno virtual, accederás a él automáticamente:
created virtual environment CPython3.9.4.final.0-64 in 482ms
creator CPython3Posix(dest=/home/osboxes/.virtualenvs/new-project, clear=False, no_vcs_ignore=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/osboxes/.local/share/virtualenv)
added seed packages: pip==21.1.2, setuptools==57.0.0, wheel==0.36.2
activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
virtualenvwrapper.user_scripts creating /home/osboxes/.virtualenvs/new-project/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/osboxes/.virtualenvs/new-project/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/osboxes/.virtualenvs/new-project/bin/preactivate
virtualenvwrapper.user_scripts creating /home/osboxes/.virtualenvs/new-project/bin/postactivate
virtualenvwrapper.user_scripts creating /home/osboxes/.virtualenvs/new-project/bin/get_env_details
Visualización de todos los entornos virtuales creados
Puedes ver todos los entornos virtuales creados así:
workon
Este comando mostrará la lista de todos los entornos virtuales creados a través de virtualenvwrapper.
Cambio entre entornos virtuales
Para cambiar a otro entorno virtual, ejecuta este comando:
workon new-project
Esto cambiará o activará el entorno virtual que elijas.
Salida del entorno virtual
Para salir del entorno virtual, ejecuta este comando:
deactivate
Copia de un entorno virtual
Para copiar entornos virtuales, introduce:
$ cpvirtualenv new-project new-project-copy
Copying new-project as new-project-copy...
$ workon
new-project
new-project-copy
Eliminación de un entorno virtual
Puedes eliminar entornos virtuales con este comando:
rmvirtualenv new-project-copy
Importante: no olvides salir del entorno virtual antes de eliminarlo usando el comando:
$ deactivate
$ rmvirtualenv new-project-copy
Removing new-project-copy...
$ workon
new-project
Conclusiones
Has aprendido los fundamentos del trabajo con entornos virtuales en Python. Ahora conoces las características de la instalación y el uso de las utilidades venv, virtualenv y virtualenvwrapper en Python.
¡Gracias por tu tiempo!
Si tienes alguna pregunta, házmela saber en los comentarios.
¡Suscríbete a las actualizaciones de nuestro blog y mantente al día de las noticias del mundo de la programación!