# Un projet Python : de l'idée à la publication

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.

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.

## Initialisation

On commence par installer redis, pour ça l'utilisation de homebrew sur mac est vraiment une bénédiction quand on a connu la puissance d'apt-get...

    $ brew install redis

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.

Passons à l'environnement Python, ici on utilise virtualenv (associé à 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 :

    $ mkvirtualenv redis_triplestore --no-site-packages
    $ cd your/path/
    $ workon redis_triplestore
    $ pip install -e git+https://github.com/andymccurdy/redis-py.git#egg=redispy
    $ pip install redis_wrap
    $ pip install redis_graph

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 :

    $ pip freeze > requirements.txt

Il y a l'excellent billet de Nico si vous voulez un peu plus de détail sur tout ça.

## Développement

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.

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 !

Je trouve ça élégant de pouvoir concrétiser une idée en une cinquantaine de lignes, juste pour le fun ;-).

## Publicaiton

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.

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 :

    $ python setup.py sdist

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 :

    # Création du dépôt sur Bitbucket
    $ hg init .
    $ mate .hg/hgrc
    # Ajout de l'URL du dépôt
    $ hg add
    $ hg ci -m "Initial implementation"
    $ hg tag "0.1"
    $ hg push

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.

Finalisons le setup.py avec 2/3 urls et enregistrons le projet sur pypi :

    $ python setup.py register
    $ python setup.py sdist upload

Et voilà ! Votre projet est accessible à tous et installable par tous, il ne reste plus qu'à en faire la promotion :-).

### Articles peut-être en rapport

- Bilan sur les rencontres Django 2011
- Format de conférence pour les rencontres Django 2011
- ★ De l'OpenData au LinkedData : exemple de nosdonnees.fr

### Commentaires

Julien le 17/12/2010 :

Python un langage apoptotique que plus personne de sérieux ne peut envisager utiliser.

David, biologeek le 19/12/2010 :

Et pourtant il a gagné une place cette année sur l'index TIOBE qui confirme la progression :
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Comme quoi...

RT le 12/01/2011 :

Le magnifique Python a un avenir un peu flou, mais tant qu'il reste promu par Google (entre autres), son apoptose reste hypothétique.

David, biologeek le 12/01/2011 :

"un peu flou" ?!

C'est le langage de l'année pour TIOBE quand même, il faut arrêter de croire que le Python est peu utilisé…

RT le 12/01/2011 :

Le "flou" du post précédent ne qualifiait pas l'adhésion des programmeurs envers Python, mais concernait la promotion de 3.0 ou 3.1 qui me semble assez peu utilisé aujourd'hui par rapport à une 2.4, 2.5 (celle utilisé pour appengine par exemple) ou plus.

Daniel le 22/11/2011 :

Ah le python quel doux langage.

En ce qui me concerne dés qu'il est question d'écrire un peut de code je l'utilise.

En quelques lignes on a quelques choses de fonctionnel.