Python-Quvi

Publié le 25/09/2011

Vous connaissez peut-être les projets minitube, cclive ou clive qui sont des outils permettant la récupération d’information de médias (vidéos, audio…) provenant de sites tels que Youtube, Dailymotion… Ces outils utilisent en fait la librairie “quvi”, et un outil en ligne de commande permet d’utiliser cette dernière. La librairie est en C. J’ai donc décidé de créer le wrapper pour Python. http://github.com/metal3d/python-quvi

En relation avec l’auteur de la librairie http://quvi.sourceforge.net/ la discussion s’est d’abord orienté sur SWIG. Ce système permet assez facilement de créer une librairie python compilé depuis une librairie C. Or, après un test ou deux, j’ai trouvé assez compliqué de travailler avec ce système.

D’abord parce que SWIG (bien que très puissant et facile d’accès) me sort en fait les fonctions C telles quelles, sans vraiment s’adapter au langage visé, du moins pour python. Et secondo, parce que je connais bien Cython qui me permet de faire la même chose, mais en plus maîtrisable.

Si vous ne connaissez pas Cython, allez faire un tour sur mon blog fedora, j’ai écris ce billet pour proposer une introduction assez simple: http://blog.fedora-fr.org/metal3d/post/Cython-pour-optimis%C3%A9-Python

Le billet présente déjà comment compiler un “shared object” pour python, je me suis orienté alors sur la page de documentation http://docs.cython.org/src/tutorial/clibraries.html qui m’a parut assez claire pour débuter le travail.

L’idée principale a été de lire le fichier “quvi.h” pour y remonter les déclarations dont j’avais besoin, puis de préparer une classe qui me permet de récupérer les type C, pour les passer en objet python.

Le résultat a été immédiat. D’abord un “.so” bien plus petit qu’avec SWIG, mais en plus une classe que je pouvais mieux adapter au langage. Option qui ne m’a pas déplut, c’est qu’en plus j’ai un seul fichier “quvi.so” et non un “_quvi.so” et un “quvi.py” à utiliser.

Et enfin, la compilation se faisant via les “distutils” de python, la librairie est compilée et installé par un simple “setup.py”.

Je vous invite donc à tester et me dire si la librairie fonctionne, non pas ici sur le blog mais sur la page du projet: http://github.com/metal3d/python-quvi

N’oubliez pas que sur github, il est préférable de forker le projet pour me proposer des pull request plutôt que des patchs. Notes enfin que je développe dans la branche “developpement” et non dans le “master”.

Voilà pour la news :)

comments powered by Disqus