24 enero 2016

Crear un entorno de desarrollo aislado Python con virtualenwrapper

Hoy vamos a preparar un entorno de desarrollo aislado para Python con virtualenvwrapper. Esto ayuda a aislar sus dependencias de otros entornos de desarrollo, especialmente cuando se utiliza con pip, de forma que se pueden tener distintos entornos sin problemas de dependencias. virtualenvwrapper ofrece algunos comandos shell para facilitar el uso de dichos entornos.

Instalación


Para instalarlo, lo primero que hay que hacer es abrir una consola y ejecutar el siguiente comando:
$ sudo aptitude install virtualenvwrapper

Además, necesitaremos instalar una serie de librerías:
$ sudo aptitude install python-pip python-pkg-resources npm libxml2-dev libxslt-dev libsasl2-dev python-dev libldap2-dev libssl-dev libjpeg-dev libmysqlclient-dev postgresql-server-dev-all libffi-dev libsasl2-dev postgresql-9.4 libsqlite3-dev

Configuracion

Una vez instalado, la configuración pasa por añadir al fichero ~/.bashrc un par de líneas de código que definirán una variable de entorno y ejecutaran un script al iniciar una terminal. Para ello abriremos un editor de texto cualquiera
$ nano ~/.bashrc
y añadiremos las siguientes dos líneas al final del fichero:

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/workspace
source /usr/local/bin/virtualenvwrapper.sh # [1]

[1] Cambia la ruta a virtualenvwrapper.sh para que coincida con la de tu instalación.
WORKON_HOME es el directorio donde virtualenvwrapper va a almacenar los entornos virtuales que crees.

Ayuda

Para ver todos los comandos que proporciona virtualenvwrapper puedes ejecutar dicho comando en una consola:
$ virtualenvwrapper

virtualenvwrapper is a set of extensions to Ian Bicking's virtualenv
tool.  The extensions include wrappers for creating and deleting
virtual environments and otherwise managing your development workflow,
making it easier to work on more than one project at a time without
introducing conflicts in their dependencies.

For more information please refer to the documentation:

    http://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html

Commands available:

  add2virtualenv: add directory to the import path

  allvirtualenv: run a command in all virtualenvs

  cdproject: change directory to the active project

  cdsitepackages: change to the site-packages directory

  cdvirtualenv: change to the $VIRTUAL_ENV directory

  cpvirtualenv: duplicate the named virtualenv to make a new one

  lssitepackages: list contents of the site-packages directory

  lsvirtualenv: list virtualenvs

  mkproject: create a new project directory and its associated virtualenv

  mktmpenv: create a temporary virtualenv

  mkvirtualenv: Create a new virtualenv in $WORKON_HOME

  rmvirtualenv: Remove a virtualenv

  setvirtualenvproject: associate a project directory with a virtualenv

  showvirtualenv: show details of a single virtualenv

  toggleglobalsitepackages: turn access to global site-packages on/off

  virtualenvwrapper: show this help message

  wipeenv: remove all packages installed in the current virtualenv

  workon: list or change working virtualenvs

Creación

Ahora ya puedes crear un nuevo entorno virtual para un proyecto
$ mkproject my_project
Esto, además de crear el nuevo projecto, nos activará el entorno virtual y nos moverá a su directorio de trabajo.

Manejo

Una vez creado el entorno virtual, para activarlo podemos ejecutar:
$ workon my_project
y para desactivarlo se utiliza el mismo comando que el utilizado para virtualenv
$ deactivate

Personalización del PYTHONPATH

Si queremos cambiar el PYTHONPATH utilizado en un virtualenv, podemos añadir la siguiente línea a nuestro archivo ~/.virtualenvs/my_project/bin/activate:
export PYTHONPATH="/the/path/you/want"
Para restablecer el PYTHONPATH original cuando se desactive el entorno virtual, podemos añadir

export OLD_PYTHONPATH="$PYTHONPATH"
Antes de la línea mencionada anteriormente y, añadir la siguiente línea al fichero ~/.virtualenvs/my_project/bin/postdeactivate script.
export PYTHONPATH="$OLD_PYTHONPATH"

Caso real de configuración de ~/.virtualenvs/my_project/bin/activate:


export OLD_PYTHONPATH="$PYTHONPATH"
export PYTHONPATH="$PYTHONHOME/trytond:$PYTHONHOME/proteus"
export OLD_DB_NAME="$DB_NAME"
export DB_NAME="try_tests"
export OLD_TRYTOND_CONFIG="$TRYTOND_CONFIG"
export TRYTOND_CONFIG="$PYTHONHOME/trytond/trytond/etc/trytond.conf"