Introducción a VirtualEnv

written by uve 18 January 2011

Para quien no lo conozca, VirtualEnv es una manera de crear entornos virtuales para Python. Esto nos permite una gran número de posibilidades, que van desde realizar test, probar la integración de un módulo con distintas versiones, ..., hasta realizar despliegues web.

Hoy voy a explicar brevemente como podemos gestionar y utilizar distintos entornos virtuales. Para ello, vamos a preparar un directorio 'env' en nuestro directorio personal.

$ cd ~
$ mkdir env
$ cd env

Dentro de nuestro sistema, disponemos de una ubicación donde se encuentran todos aquellos módulos que están instalados. Cuando se realiza un import dentro de nuestro código, se busca el módulo en cuestión en el directorio en el que estamos o en el directorio del sistema. Este directorio del sistema se conoce como site-packages.

Cuando creamos un entorno virtual con virtualenv, éste crea un nuevo site-packages. Lo realmente interesante, es que podemos hacer uso del site-packages del sistema o no. Si no hacemos uso de él, sólo estarán disponibles aquellos módulos de la librería estándar de Python.

Por lo general, no se hace uso del site-packages del sistema, ya que así se consigue un entorno más acotado. Veamos como podemos crear un entorno virtual:

$ virtualenv --no-site-packages ENV1
New python executable in ENV1/bin/python
Installing distribute...................done.

Con esto se crea un directorio ENV1 que contendrá toda la información del entorno virtual. Podemos echar un vistazo al directorio:

$ cd ENV1/
$ ls -l
total 12
drwxr-xr-x 2 uve uve 4096 2011-01-18 13:24 bin
drwxr-xr-x 2 uve uve 4096 2011-01-18 13:24 include
drwxr-xr-x 3 uve uve 4096 2011-01-18 13:24 lib

Esto recuerda mucho al sistema raíz de una distribución Linux. Ahora vamos a entrar dentro el entorno virutal:

$ source bin/activate

Se supone que estamos dentro de ~/env/ENV1/. Si ahora lanzamos un intérprete Python o creamos un script y lo ejecutamos, se estará ejecutando dentro del entorno virutal, es decir, sólo estará disponible aquello que hayamos instalado manualmente.

Tras activar el entorno virtual, aparecerá el nombre de éste al principio del prompt, algo así:

(ENV1)$

Ahora vamos añadir los módulos que necesitemos para el testeo o lo que vayamos a hacer. Por ejemplo, vamos a instalar el módulo feedparser:

(ENV1)$ easy_install feedparser
Searching for feedparser
Reading http://pypi.python.org/simple/feedparser/
Best match: feedparser 4.1
Downloading http://pypi.python.org/packages/source/F/FeedParser/feedparser-4.1.tar.gz#md5=573a8df4d4305b37107040654f52b826
Processing feedparser-4.1.tar.gz
Running feedparser-4.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-47N6CR/feedparser-4.1/egg-dist-tmp-YQQH7W
zip_safe flag not set; analyzing archive contents...
Adding feedparser 4.1 to easy-install.pth file

Installed /home/uve/bin/env/ENV1/lib/python2.7/site-packages/feedparser-4.1-py2.7.egg
Processing dependencies for feedparser
Finished processing dependencies for feedparser

easy_install es un comando que nos permite instalar todos los módulos disponibles en pypi, el mayor repositorio de módulos Python.

Podemos chequear que la instalación se ha realizado correctamente:

(ENV1)$ python
Python 2.7.1+ (r271:86832, Dec 24 2010, 10:04:43)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import feedparser
>>>

Y a partir de aquí, ya podemos trabajar. Y una vez que terminemos, debemos salir del entorno virtual. Para ello, basta con ejecutar:

(ENV1)$ deactivate

Y con esto ya está todo listo.

Tags

La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.