virtualevn para todos
Una de las cosas que me traje del último pyday en Córdoba de fin de abril, fue la idea de empezar a usar virtualenv.
Virtualenv es un software que virtualizar entornos python. Esto permite tener distintas configuraciones sin romper la dependencia de paquetes entre los distintos proyectos. Permite tener distintas versiones de paquetes instalados y sobre todo para cuando necesitamos instalar paquetes, no tenemos permisos de root y tenemos que andar rogando al sysadmin que los instale.
A continuación unas notas de instalación y uso. Fueron hechas usando ubuntu, pero son similares en debian y parecidas en cualquier otro linux. Para los demás, vean la doc oficial de virtualenv.
Instalando
Lo primero es instalar virtualenv y pip para instalar los paquetes dentro de nuestro entorno.
apt-get install python-virtualenv apt-get install python-pip
Creando el entrono
Crearemos nuestro primer virtualenv en el directrio env,
patricio@plg:~/dev/python$ virtualenv --distribute --no-site-packages env/New python executable in env/bin/python Installing distribute........done. Installing pip...............done.
Listo, tenemos una copia de nuestro python pelado en env/
Esto sería bueno hacerlo con cada uno de los proyectos que emprendamos.
Instalando paquetes
Para instalar paquetes desde fuera del entorno usamos la opción -E de pip. Por ejemplo, si queremos la última versión de django disponible en pypi:
patricio@plg:~/dev/python$ pip install -E env/ Django
Downloading/unpacking Django
Downloading Django-1.3.tar.gz (6.5Mb): 6.5Mb downloaded
Running setup.py egg_info for package Django
Installing collected packages: Django
Running setup.py install for Django
changing mode of build/scripts-2.6/django-admin.py from 644 to 755
changing mode of /home/patricio/dev/python/env/bin/django-admin.py to 755
Successfully installed Django
Cleaning up...
patricio@plg:~/dev/python$
Activando y desactivando
Para activar el entorno usamos source, para desactivarlo, deactivate:
patricio@plg:~/dev/python$ source env/bin/activate (env)patricio@plg:~/dev/python$(env)patricio@plg:~/dev/python$ deactivate patricio@plg:~/dev/python$
Turbulencias
Podemos llegar a tener complicaciones al instalar ciertos paquetes, que no son puramente python. Por ejemplo, al querer instalar MySql-python mediante pip, larga algunas excepciones.
Tenemos que instalar antes libmysqlclient-dev y python-dev.
patricio@plg:~/dev/python$ pip install -E env/ MySQL-python Downloading/unpacking MySQL-python Running setup.py egg_info for package MySQL-python sh: mysql_config: not found Traceback (most recent call last): ....sudo apt-get install libmysqlclient-dev sudo apt-get install python-dev
ahora si,
patricio@plg:~/dev/python$ pip install -E env/ MySQL-python Downloading/unpacking MySQL-python ... Successfully installed MySQL-python Cleaning up...
Probando cosas
Ya que estamos, probamos un proyecto que teníamos con una versión menor de django donde nos muestra algunos warnings.
patricio@plg:~/dev/python$ source env/bin/activate (env)patricio@plg:~/dev/python$ cd django/nutricion/ (env)patricio@plg:~/dev/python/django/nutricion$ python manage.py runserver Validating models... /home/patricio/dev/python/env/lib/python2.6/site-packages/django/db/__init__.py:19: DeprecationWarning: settings.DATABASE_* is deprecated; use settings.DATABASES instead. DeprecationWarning /home/patricio/dev/python/env/lib/python2.6/site-packages/django/db/__init__.py:60: DeprecationWarning: Short names for ENGINE in database configurations are deprecated. Prepend default.ENGINE with 'django.db.backends.' DeprecationWarning 0 errors found Django version 1.3, using settings 'nutricion.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
Clonando entornos
Cuando trabajamos con virtualenv es facil reproducir el entrono. Con el comando freeze podemos ver el estado actual de paquetes en el entorno.
(env)patricio@plg:~/dev/python$ pip freeze Django==1.3 MySQL-python==1.2.3 distribute==0.6.15 wsgiref==0.1.2
Para reproducir el entorno, exportamos la lista de paquetes instalados y después lo replicamos en otro lado.
(env)patricio@plg:~/dev/python$ pip freeze > instalacion.txtpatricio@plg:~/dev/python$ virtualenv --distribute --no-site-packages otroEnv/ patricio@plg:~/dev/python$ pip install -E otroEnv/ -r instalacion.txt
Referencias:
http://pypi.python.org/pypi/virtualenv
http://www.saltycrane.com/blog/2009/05/notes-using-pip-and-virtualenv-django/
Buscar temas relacionados
[...] rotundo éxito de cómo usar django con apache y mod_wsgi y demostradas las virtudes de utilizar virtualenv, veamos como usar todo esto [...]