Virtualenv

De Cacauet Wiki
Dreceres ràpides: navegació, cerca

Virtualenv és un programari que ens permet crear un entorn aïllat de llibreries i executables per a Python.

Aquesta eina és molt important ja que ens permet tenir, dins d'un mateix servidor, diverses versions de cada llibreria, i no interferir amb els paquets que té instal·lats el sistema operatiu.

De fet, és una bona pràctica instal·lar el mínim de llibreries a nivell de sistema operatiu, i fer tots els desenvolupaments o desplegaments cadascú amb els seus binaris i llibreries en un virtualenv.


Instal·lació[modifica]

Gestor de paquets Python PIP[modifica]

Primer de tot ens cal tenir instal·lat el gestor de paquets Python PIP (la "alternativa" a easy_install, però que ara per ara ja és la primera opció). En un entorn Debian/Ubuntu el podríem instal·lar amb un apt-get install python-pip . Però millor fer-ho a través del script següent, ja que aconseguirem la darrera versió:

https://pip.pypa.io/en/stable/installing/

Descarrega l'script get-pip.py i executa amb sudo per que s'instal·li a nivell de sistema:

$ sudo python get_pip.py

Podem saber quines llibreries hi ha instal·lades en el sistema fent:

$ pip freeze

Preneu nota, perquè aquesta comanda és molt útil per reproduir entorns de desenvolupament.

PIP es pot actualitzar a ell mateix amb:

$ pip install --upgrade pip

Virtualenv package[modifica]

Un cop instal·lat PIP, podrem descarregar i instal·lar Virtualenv en el sistema. Serà el darrer cop que fem sudo, ja que, tal i com hem dit, la bona pràctica és instal·lar el mínim de paquets a nivell de sistema operatiu.

$ sudo pip install virtualenv

Si volguéssim instal·lar alguna versió concreta, podríem fer algo així com

$ sudo pip install virtualenv==15.0.1

O bé aquesta, que instal·laria la darrera versió, o al menys alguna que superés la indicada.

$ sudo pip install virtualenv>=15.0.1


Crear entorns virtuals[modifica]

Insisteixo, a partir d'ara RES DE SUDO !!!

Per crear un entorn de programació virtual, ara podrem fer:

$ virtualenv ~/env1

Ens crearà una carpeta al nostre home directory anomenada "env1" amb aquesta estructura:

env1
├── bin
│   ├── activate
│   ├── pip
│   ├── python
│   └── ...
├── include
│   └── python2.7 -> /usr/include/python2.7
├── lib
│   └── python2.7
│       ├── distutils
│       ├── encodings -> /usr/lib/python2.7/encodings
│       ├── lib-dynload -> /usr/lib/python2.7/lib-dynload
│       └── site-packages
└── local
    ├── bin -> /home/enric/env1/bin
    ├── include -> /home/enric/env1/include
    └── lib -> /home/enric/env1/lib

Com podem veure, disposem d'una carpeta amb binaris (bin) on hi trobarem pip, python i sobretot, un script activate que farem servir per configurar la nostra shell dintre d'aquest entorn.

Per configurar la nostra shell dins del virtualenv "env1" farem:

$ source ~/env1/bin/activate

I ara el nostre prompt serà aquest altre:

(env1) $

El què significa que a partir d'ara, els binaris i llibreries que executarà la shell seran preferentment els que hi ha al nostre virtualenv.

Genial, oi? 8)

Bé, ja sé que encara no us en feu càrrec de la magnitud d'aquesta eina, però jo ho anireu veient ;)

Òbviament podeu crear diversos entorns virtuals, cadascun per un desenvolupament o desplegament diferent.

Per saber quines llibreries teniu instal·lades en el vostre virtualenv, simplement feu:

(env1) $ pip freeze

...que, en principi, us hauria de sortir buit. Proveu d'instal·lar una llibreria, per exemple:

(env1) $ pip install simplejson

I si torneu a fer pip freeze veureu que us apareix la nova llibreria.

Per sortir del nostre virtualenv:

(env1) $ deactivate