Come creare multipli ambienti Django con virtualenv

By | 30 agosto 2010

Spesso capita di dover lavorare su svariate applicazioni Django, ognuna dipendente da librerie diverse.

Può succedere ad esempio di lavorare su un progetto in Django 1.1 e di doverne iniziare uno nuovo con l’ultima versione del framework.

La soluzione migliore è quella di tenere i vari ambienti separati, in modo di garantire ad ogni progetto l’accesso alle sole librerie da cui dipende.

Python ci propone virtualenv, un tool per creare multipli ambienti isolati. Ogni ambiente è completamente autonomo dagli altri e dai pacchetti installati nel site-packages di sistema.

Vediamo allora come creare un virtualenv ed installarvi l’ultima versione di Django (ad oggi 1.2.1).

1- Installare python-setuptools

La prima cosa da fare è installare python-setuptools, in modo da avere accesso al comando easy_install per poter scaricare pacchetti in facilità. In alternativa è possibile ottenere gli stessi risultati utilizzando il pacchetto pip.

Apriamo dunque una console e digitiamo i seguenti comandi:

1
2
3
4
5
6
7
stefano@stefano-laptop:~$ sudo apt-get install python-setuptools
Reading package lists... Done
Building dependency tree      
Reading state information... Done
python-setuptools is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 132 not upgraded.
stefano@stefano-laptop:~$

2- Installare virtualenv

Il secondo passo consiste nell’installare il pacchetto virtualenv utilizzando easy_install:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
stefano@stefano-laptop:~$ sudo easy_install virtualenv
[sudo] password for stefano:
Searching for virtualenv
Reading http://pypi.python.org/simple/virtualenv/
Reading http://virtualenv.openplans.org
Best match: virtualenv 1.4.9
Downloading http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.4.9.tar.gz#md5=c49067cab242b5ff8c7b681a5a99533a
Processing virtualenv-1.4.9.tar.gz
Running virtualenv-1.4.9/setup.py -q bdist_egg --dist-dir /tmp/easy_install-3D0IWT/virtualenv-1.4.9/egg-dist-tmp-xe4LRm
warning: no previously-included files matching '*.*' found under directory 'docs/_templates'
Adding virtualenv 1.4.9 to easy-install.pth file
Installing virtualenv script to /usr/local/bin

Installed /usr/local/lib/python2.6/dist-packages/virtualenv-1.4.9-py2.6.egg
Processing dependencies for virtualenv
Finished processing dependencies for virtualenv

3- Creare l’ambiente virtuale

Una volta installato il pacchetto virtualenv sarà necessario creare uno spazio in cui ospitare i molteplici ambienti. Nel mio caso, ho preferito creare una directory nella mia home, piuttosto che in un altro folder scrivibile del filesystem.

1
2
3
4
5
stefano@stefano-laptop:~$ cd Progetti/Python/
stefano@stefano-laptop:~/Progetti/Python$
stefano@stefano-laptop:~/Progetti/Python$ mkdir virtualenvs
stefano@stefano-laptop:~/Progetti/Python$ cd virtualenvs/
stefano@stefano-laptop:~/Progetti/Python/virtualenvs$

A questo punto creiamo il reale virtualenv, che chiameremo “django-1.2-env”. Notiamo che al comando virtualenv abbiamo aggiunto come argomento —no-site-packages: in questo modo il nostro ambiente virtuale avrà solamente un set minimale di librerie nel proprio folder site-packages. Teniamo inoltre presente che tutti i comandi che inseriremo d’ora in poi non necessitano dell’accesso come super utente via sudo.

1
2
3
stefano@stefano-laptop:~/Progetti/Python/virtualenvs$ virtualenv --no-site-packages django-1.2-env
New python executable in django-1.2-env/bin/python
Installing setuptools............done.

4- Scaricare Django in /tmp

Apriamo una nuova console e scarichiamo il tarball con l’ultima versione del framework Django. Per semplicità, ho scaricato il pacchetto in /tmp.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
stefano@stefano-laptop:~$ cd /tmp/
stefano@stefano-laptop:/tmp$ wget http://www.djangoproject.com/download/1.2.1/tarball/
--2010-08-28 11:20:58--  http://www.djangoproject.com/download/1.2.1/tarball/
Resolving www.djangoproject.com... 64.207.133.18
Connecting to www.djangoproject.com|64.207.133.18|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://media.djangoproject.com/releases/1.2/Django-1.2.1.tar.gz [following]
--2010-08-28 11:20:59--  http://media.djangoproject.com/releases/1.2/Django-1.2.1.tar.gz
Resolving media.djangoproject.com... 64.207.133.30
Connecting to media.djangoproject.com|64.207.133.30|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6248006 (6.0M) [application/octet-stream]
Saving to: `Django-1.2.1.tar.gz'

100%[======================================>] 6,248,006    590K/s   in 12s    

2010-08-28 11:21:11 (523 KB/s) - `Django-1.2.1.tar.gz'
saved [6248006/6248006]

5- Installare Django nel virtualenv

A questo punto, scompattiamo Django e attiviamo il virtualenv (tramite il comando “source virtualenvdir/bin/activate”). Una volta attivato il virtualenv troveremo il suo nome preposto nella shell: (django-1.2-env)stefano@stefano-laptop

1
2
3
4
stefano@stefano-laptop:/tmp$ tar xzfv Django-1.2.1.tar.gz
stefano@stefano-laptop:/tmp/Django-1.2.1$ source /home/stefano/Progetti/Python/virtualenvs/django-1.2-env/bin/activate
(django-1.2-env)stefano@stefano-laptop:/tmp/Django-1.2.1$
(django-1.2-env)stefano@stefano-laptop:/tmp/Django-1.2.1$ python setup.py install

Verifichamo dunque che Django sia stato installato correttamente nel site-packages dell’ambiente virtuale:

1
2
3
stefano@stefano-laptop:~/Progetti/Python/virtualenvs/django-1.2-env$ ls lib/python2.6/site-packages/
django               easy-install.pth     setuptools-0.6c11-py2.6.egg
Django-1.2.1-py2.6.egg-info  pip-0.7.2-py2.6.egg  setuptools.pth

6- Creare un nuovo progetto

Possiamo ora creare un nuovo progetto utilizzando il comando django-admin.py come richiesto dal framework.

1
2
3
4
5
6
(django-1.2-env)stefano@stefano-laptop:/tmp/Django-1.2.1$ cd /home/stefano/Progetti/Python/
(django-1.2-env)stefano@stefano-laptop:~/Progetti/Python$
(django-1.2-env)stefano@stefano-laptop:~/Progetti/Python$ django-admin.py startproject newdjangoapp
(django-1.2-env)stefano@stefano-laptop:~/Progetti/Python$ cd newdjangoapp/
(django-1.2-env)stefano@stefano-laptop:~/Progetti/Python/newdjangoapp$ ls
__init__.py  manage.py  settings.py  urls.py

In conclusione, possiamo dire che virtualenv rappresenta un’ottima soluzione per creare ambienti completamente indipendenti e finalizzati ad ospitare ogni singolo progetto. In questo modo, possiamo evitare conflitti di librerie e abbiamo la possibilità di sperimentare a piacimento nuove configurazioni evitando di creare problemi alle altre applicazioni.

Category: Svliluppo Python Tag:, ,

About Stefano

Stefano Mancini is a co-founder of DevInterface.

After graduating in Computer Science, he first specialized in Java/J2EE development by participating in several international projects in the pharmaceutical and banking ambits.

Enthusiast of agile development, like SCRUM for project management and eXtreme Programming for code writing, he then moved to dynamic languages like Ruby and Python.

3 thoughts on “Come creare multipli ambienti Django con virtualenv

  1. Pingback: How to create multiple Django environments using virtualenv « XP on Rails

  2. Pingback: Tweets that mention How to create multiple Django environments using virtualenv | DevInterface Blog -- Topsy.com

Comments are closed.