Los entornos virtuales en Python se usan para aislar la ejecución de los scripts, de forma que ejecuten una versión determinada del intérprete y con unos paquetes también, de una versión predeterminada.
Para producir este aislamiento, se copian los archivos necesarios dentro de una carpeta y se ejecuta el intérprete de Python de forma virtual dentro de ella.
Estos son algunos de los entornos más conocidos.
Virtualenv
Virtualenv es un paquete de terceros que permite crear y usar entornos virtuales con diferentes versiones del intérprete de Python. Virtualenv crea una carpeta y copia dentro la estructura de datos de Python para tener sus propios binarios, paquetes, etc. Dependiendo del sistema operativo estos binarios pueden ser diferentes. Por ejemplo, en MacOS o Linux el directorio donde están los binarios se llama bin mientras que en Windows el directorio se llama scripts.
La utilidad de virtualenv se pone de manifiesto cuando se quieren mantener funcionando varios programas realizados con diferentes versiones del intérprete y diferentes versiones de paquetes, evitando, por ejemplo, el riesgo de que alguno de ellos deje de funcionar por alguna actualización del lenguaje. Con esto se consigue que cada implementación del entorno virtual, esté aislada de las otras.
La sintaxis para instalar virtualenv es:
pip3 install virtualenv
Para actualizarlo, una vez instalado, se utiliza el parámetro –upgrade, de la siguiente forma:
pip3 install virtualenv --upgrade
Si se ejecuta virtualenv –help, se muestra la ayuda:
virtualenv --help
You must provide a DEST_DIR
Usage: virtualenv [OPTIONS] DEST_DIR
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-v, --verbose Increase verbosity.
-q, --quiet Decrease verbosity.
-p PYTHON_EXE, --python=PYTHON_EXE
The Python interpreter to use, e.g.,
--python=python2.5 will use the python2.5 interpreter
to create the new environment. The default is the
interpreter that virtualenv was installed with (/Syste
m/Library/Frameworks/Python.framework/Versions/2.7/Res
ources/Python.app/Contents/MacOS/Python)
--clear Clear out the non-root install and start from scratch.
--no-site-packages DEPRECATED. Retained only for backward compatibility.
Not having access to global site-packages is now the
default behavior.
--system-site-packages
Give the virtual environment access to the global
site-packages.
--always-copy Always copy files rather than symlinking.
--unzip-setuptools Unzip Setuptools when installing it.
--relocatable Make an EXISTING virtualenv environment relocatable.
This fixes up scripts and makes all .pth files
relative.
--no-setuptools Do not install setuptools in the new virtualenv.
--no-pip Do not install pip in the new virtualenv.
--no-wheel Do not install wheel in the new virtualenv.
--extra-search-dir=DIR
Directory to look for setuptools/pip distributions in.
This option can be used multiple times.
--download Download preinstalled packages from PyPI.
--no-download, --never-download
Do not download preinstalled packages from PyPI.
--prompt=PROMPT Provides an alternative prompt prefix for this
environment.
--setuptools DEPRECATED. Retained only for backward compatibility.
This option has no effect.
--distribute DEPRECATED. Retained only for backward compatibility.
This option has no effect.
La sintaxis para crear un nuevo entorno virtual es:
virtualenv [opciones] directorio_destino
Las opciones mas usadas son:
–version muestra el número de versión del programa.
-p PYTHON_EXE, –python=PYTHON_EXE donde PYTHON_EXE es el interprete a usar. Por ejemplo –python=python2.7 crea un nuevo entorno virtual con la versión 2.7 de Python.
-v, –verbose muestra mas información al ejecutar el comando.
-q, –quiet muestra menos información al ejecutar el comando.
–clear limpia la instalación y comienza de cero. Se usa para restablecer un entorno virtual.
–system-site-packages da al entorno virtual acceso al sitio global donde están los paquetes fuera del entorno virtual.
–always-copy siempre copia ficheros en lugar de crear enlaces simbólicos.
–relocatable modifica un entorno existente de virtualenv para convertirlo en reubicable, se modifican los scripts cambiando todos los paths absolutos en relativos.
–no-setuptools No instala las setuptools en el nuevo entorno virtual.
–no-pip No instala pip en el nuevo entorno virtual.
–no-wheel No instala wheel en el nuevo entorno virtual.
–extra-search-dir=DIR directorio donde buscar las distribuciones de setuptools/pip. Esta opción puede ser usada múltiples veces.
–download descarga los paquetes pre-instalados desde PyPI.
–no-download, –never-download no descarga los paquetes pre-instalados desde PyPI.
–prompt=PROMPT provee un prefijo prompt alternativo para este entorno virtual.
Para ver un ejemplo de uso, el siguiente, instala un entorno virtualizado con la versión de Python 2.7.
~ virtualenv -p python2.7 entorno_python2.7
Python 2.7 debe de estar instalado previamente en el sistema para que se pueda crear el entorno virtual. Para activarlo hay que acceder dentro de la carpeta entorno_python2.7 y ejecutar el comando de activación:
En MacOS o Linux:
~ cd ./entorno_python2.7/
~ source bin/activate
En Windows:
cd .\entorno_python2.7\
Scripts\activate
El comando para desactivar el entorno virtual en cualquiera de los sistemas es:
deactivate
Con el entorno virtual iniciado se muestra el nombre del entorno entre paréntesis, con esto es posible determinar que está en funcionamiento el entorno virtual y que los programas o comandos Python que se ejecuten son los que contiene este entorno y no los del sistema.
Venv
Venv es un paquete que se instala con Python 3 que se puede usar de la siguiente forma:
python -m venv nombre_carpeta
El funcionamiento es parecido al de virtualenv salvo que venv por defecto no copia los binarios en las carpetas creadas, en su lugar crea enlaces simbólicos a la instalación global. La excepción está en Windows en cuya plataforma sí que los copia.