/dev/blah

things i want to remember, things i want to share

Développeur Python et adepte Linux depuis 2005, Core développeur Kivy, passionné par beaucoup trop de choses.
Profil Github gpg signature bitcoin address

Entries tagged “pip”

Mise en place d'un environnement de dev web python propre...

written by tshirtman, on 2/10/10 1:47 AM.

Explications préliminaire

Lorsqu’on débute dans le développement web en python, la mise en place d’un environnement de développement propre, au vu des différents outils disponibles, peut être un vrai labyrinthe. Je présenterai donc ici trois outils modernes et efficaces permettant de gérer le déploiement de la plupart des frameworks web python: virtualenv, pip et distribute

virtualenv permet de configurer un environnement python séparé de celui du système, l’interpréteur python et toutes les bibliothèques qui nous sont nécessaires seront installé dans cet environnement virtuel et ne perturberont pas le système… cela permet d’avoir un environnement identique sur différents serveurs avec des distributions différentes avec relativement peu de soucis.

pip permet d’installer des paquets python depuis pypi (connu aussi sous le nom de “cheese shop”) et de les installer, soit dans le système, soit dans le virtualenv choisit. Contrairement à easy_install (plus connus car plus ancien) pip est capable de nettoyer derrière lui, si on lui demande de désinstaller un paquet il le fait… il ne gère cependant pas les dépendance lors de la suppression.

distribute, qui sera utilisé par pip pour télécharger et installer les paquets depuis pypi, est une version activement maintenue de setuptools, qui permet d’utiliser et de créer des modules python (appelés eggs).

Passons à la pratique, comment ça marche, concrètement?
La première chose que nous voulons, est une version récente de pip, on peut pour cela utiliser… easy_install.
sudo easy_install pip
C’est la dernière fois que nous toucherons easy_install, une fois fait ceci, on utilise pip pour installer virtualenv et distribute
sudo pip install virtualenv distribute
Il faut maintenant créer notre virtualenv, il faut ici préciser que nous voulons utiliser distribute (sinon il utilise setuptools qui est assez buggé).
export VIRTUALENV_USE_DISTRIBUTE=true
virtualenv my_virtual_python_env
Vous pouvez bien sur donner tout nom qui vous convient à votre virtualenv ;).
Pour travailler avec un virtualenv, il faut l’activer, cela consiste à charger un certain nombre de variables d’environnement, un script fait ça pour nous, il se situe dans my_virtual_env/bin/ et s’appele activate, pour charger les variables d’un script, on utilise “source”:
source my_virtual_env/bin/activate
qui peut s’abrévier
. my_virtual_env/bin/activate
Ouf! Si tout s’est bien passé, on a un virtualenv opérationnel et chargé! (Pour “sortir” d’un virtualenv, utiliser la commande “deactivate”).

Pour aller plus loin:
Mettons que je veuille commencer un projet pylons ou repoze.bfg, ou bluebream, je peux installer ces frameworks via pip.
pip install pylons repoze.bfg bluebream
Ces frameworks utilisent paster pour permettre la création d’un projet aisément, le fait de les installer (via pip) fournis des templates à paster… s’il n’a pas été installé automatiquement (par pip et dans le virtualenv, pas dans le systeme) installez le via
pip install pastedeploy paste pastescript
(s’il a été installé dans le système auparavant, utilisez le très pratique pip uninstall pour faire le ménage).

On peut voir la liste des templates disponibles avec:
paster --list-templates
exemple:
Available templates:
  basic_package:      A basic setuptools-enabled package
  bfg_alchemy:        repoze.bfg SQLAlchemy project using traversal
  bfg_routesalchemy:  repoze.bfg SQLAlchemy project using Routes (no traversal)
  bfg_starter:        repoze.bfg starter project
  bfg_zodb:           repoze.bfg ZODB starter project
  bluebream:          A BlueBream project
  paste_deploy:       A web application deployed through paste.deploy
  pylons:             Pylons application template
  pylons_minimal:     Pylons minimal application template
Créer un projet repoze.bfg? rien de plus simple:
paster create -t bfg_ nom_du_projet
La base est là! Aller dans le dossier du projet, lancer:
python setup.py install
Pour déployer l’application (toujours dans votre virtualenv, et donc sans polluer votre système).

…et (enfin) pour lancer votre application:
paster serve fichier.ini

voila, votre appli par défaut tourne sur 127.0.0.1:6543, le port étant bien sur réglable dans le fichier .ini.
elle est complètement isolée du système et donc aisément reproductible.

Conclusion

Cette mise en place peut paraître un peu laborieuse, mais a l’avantage d’une quasi totale indépendance au système cible, tout en restant simple à mettre à jours (pip install –upgrade), distribuable (création d’eggs avec distribute), et sûrement d’autres dont je n’ai même pas connaissance :P. J’espère que vous avez apprécié, n’hésitez pas à faire des remarques :).

Tip me if you like this :)

Tags

#FIXME 3G absurd ad_sense alterway aléatoire android animation anonymity atheism bach backlog bash bitcoins blog blogging boldness book books boulot bricolage bépo C canvas captcha captures carte SD censure christianity chroot CLI cli cloudwatt code colors comfort zone command line community company life conferences contest copwatch copwatchnord-idf core-devs cours ct705 culture deb debian debug deformation dehors dessin dev distribute distribution débutant déploiement développement ebooks eeepad eeepc effect ego empty en escher event firefly flappy bird flask fosdem foss fr fun game garden gdb geek culture git github goals graphics grrr gödel hack hackathon hacked hacking hooks i3 images IMAP inspirational install isync java jeu jeu video jinja2 jni keyboard keynav kivy kv lame learning lib libre life linux lol macosx magnet mail mailing-list mails maths mbsync meetings memory leak mesh meta mint mirroir MIT module motivational mouse museomix mutt nexus7 no-mouse notmuch nottoomuch offlineimap onycroit opencourseware osc packaging paris passphrase password patch pentacatyl people perte de données ping pip planning plugin positioning pr procrastination programmation progress project projet property proudhon proxy psf publisher/consumer pull-down pygame pyjnius pypi python pythonar qtile raid rapsberry pi reading recorder references release religion responsive review reviews réseau réseaux sociaux résurection salon screenshots script self service shows shutil shyness sizing solib sortie sousous!!! spam spritz stash status systeme système templating terminal texture texture coordinates Thomas Paine thread thème tiling time time management. tip tips tools transformer tutorial tv twitter typematrix typing ubuntu ubuntu-fr ultimate-smash-friends unity upload images useless usf utils value VDM video vie/mort vim virtualenv visite widget windows wm wmii work workflow workflow. zine études