Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

article.md 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. title: Un projet Python : de l'idée à la publication
  2. slug: un-projet-python-de-lidee-la-publication
  3. date: 2010-12-03 01:20:50
  4. type: post
  5. vignette: images/logos/graphe-social.png
  6. contextual_title1: Bilan sur les rencontres Django 2011
  7. contextual_url1: 20110426-bilan-sur-les-rencontres-django-2011
  8. contextual_title2: Format de conférence pour les rencontres Django 2011
  9. contextual_url2: 20101210-format-de-conference-pour-les-rencontres-django-2011
  10. contextual_title3: ★ De l'OpenData au LinkedData : exemple de nosdonnees.fr
  11. contextual_url3: 20101130-de-lopendata-au-linkeddata-exemple-de-nosdonneesfr
  12. J'aime coder en Python mais pas uniquement pour l'esthétique ou la puissance du langage, j'apprécie l'écosystème me permettant de concrétiser une idée en quelques commandes. Je vais prendre un exemple concret avec l'idée du jour qui était de créer un triple store à partir de redis_graph suite à [un tweet de Régis Gaidot](http://twitter.com/#!/rgaidot/status/10317008201580544).
  13. Au final, je n'aurais pas utilisé redis_graph car l'implémentation utilisant des sets était limitante et je préférais avoir recours à des hashs mais ce n'est pas l'objet du billet. Je vais essayer de décrire commande par commande ce que j'ai pu faire cette après midi.
  14. ## Initialisation ##
  15. On commence par installer redis, pour ça l'utilisation de [homebrew](http://mxcl.github.com/homebrew/) sur mac est vraiment une bénédiction quand on a connu la puissance d'apt-get...
  16. $ brew install redis
  17. Et ensuite il faut un peu deviner comment lancer le serveur (bon ok, ou lire la doc), tiens il y a des redis-* dans mon path, essayons redis-server, bingo ! Et voilà notre serveur de test lancé, pas trop besoin de se préoccuper de la configuration pour l'instant.
  18. Passons à l'environnement Python, ici on utilise [virtualenv](http://virtualenv.openplans.org/) (associé à [virtualenvwrapper](http://www.doughellmann.com/projects/virtualenvwrapper/)) qui est la solution miracle que tout le monde attendait pour avoir des environnements Python virtuels indépendants. Et on installe les dépendances :
  19. $ mkvirtualenv redis_triplestore --no-site-packages
  20. $ cd your/path/
  21. $ workon redis_triplestore
  22. $ pip install -e git+https://github.com/andymccurdy/redis-py.git#egg=redispy
  23. $ pip install redis_wrap
  24. $ pip install redis_graph
  25. Pour éviter d'avoir à installer les dépendances à la main pour notre projet, on génère tout de suite un fichier requirements.txt qui permettra de faire ça en une fois :
  26. $ pip freeze > requirements.txt
  27. Il y a l'[excellent billet de Nico](http://blog.akei.com/post/573774396/installer-django-dans-un-environnement-python-virtuel) si vous voulez un peu plus de détail sur tout ça.
  28. ## Développement ##
  29. Ici vous commencez à coder votre idée, pas grand chose à dire là-dessus. J'ai décidé de mettre directement les tests dans le fichier car je voulais que ça tienne dans un snippet avant d'en faire un vrai projet.
  30. J'ai juste encore une fois été étonné par la rapidité de Redis, au point de me demander au début si mes tests étaient bien évalués !
  31. Je trouve ça élégant de pouvoir concrétiser une idée en une cinquantaine de lignes, juste pour le fun ;-).
  32. ## Publicaiton ##
  33. Si j'hésite à publier ce genre de bêtise codée en 2h c'est car ça implique une certaine responsabilité et maintenance qui est chronophage (et pas vraiment enthousiasmante non plus...). Mais je me dis que ça peut être utile, au même titre que redis_wrap dont je me suis servi avec satisfation.
  34. Ici c'est l'étape technique du setup.py qui consiste généralement en un copier/coller d'un autre/ancien projet qu'il faut adapter. Pour vérifier qu'il fonctionne bien :
  35. $ python setup.py sdist
  36. Ok, votre paquet est créé, commençons par mettre le code quelque part. Ça dépend de vos préférences, je préfère mercurial donc je pousse ça sur [Bitbucket](https://bitbucket.org/) :
  37. # Création du dépôt sur Bitbucket
  38. $ hg init .
  39. $ mate .hg/hgrc
  40. # Ajout de l'URL du dépôt
  41. $ hg add
  42. $ hg ci -m "Initial implementation"
  43. $ hg tag "0.1"
  44. $ hg push
  45. Vous pouvez faire les premières étapes dans un autre ordre mais de mémoire, si vous clonez et que vous avez déjà un dossier du même nom correspondant au projet, ça va râler.
  46. Finalisons le setup.py avec 2/3 urls et enregistrons le projet sur pypi :
  47. $ python setup.py register
  48. $ python setup.py sdist upload
  49. Et voilà ! Votre projet est [accessible à tous](http://code.welldev.org/redis_triplestore) et [installable par tous](http://pypi.python.org/pypi/redis_triplestore), il ne reste plus qu'à en faire la promotion :-).