Virtualenv
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.
Contingut
Instal·lació
Gestor de paquets Python PIP
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
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
Per crear un entorn de programació virtual, ara podrem fer:
$ virtualenv --no-site-packages ~/env1
Ens crearà una carpeta al nostre home directory anomenada "env1" amb aquesta estructura:
env11 ├── bin ├── 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/env11/bin ├── include -> /home/enric/env11/include └── lib -> /home/enric/env11/lib