Python-Quvi

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 :)

Ça peut vous intéresser aussi


Didacticiel Python Part 1

Je me suis développé un petit outil de load-balancing en ...


Python en mode one liner

Python, c’est cool, c’est fun, c’est lisible ...


Générateur de tests Python pour nose

Python, j’en parle beaucoup, mais je l’utilise aussi ...


Python map zip lambda et filter

Python est un langage fort de principes de développement permettant ...

Merci de m'aider à financer mes services

Si vous avez apprécié cet article, je vous serai reconnaissant de m'aider à me payer une petite bière :)

Si vous voulez en savoir plus sur l'utilisation de flattr sur mon blog, lisez cette page: Ayez pitié de moi

Commentaires

Ajouter un commentaire

Metal3d - 06/11/2011

@casinofrancais effectivement, c’est une option très appréciable. C’est la grande différence entre SWIG et Cython, le fait que Cython est un langage à part entière et non un bridge maker, du coup on a pas une interface mais une librairie

Ajouter un commentaire

(*) Votre e-mail ne sera ni revendu, ni rendu public, ni utilisé pour vous proposer des mails commerciaux. Il n'est utilisé que pour vous contacter en cas de souci avec le contenu du commentaire, ou pour vous prévenir d'un nouveau commentaire si vous avez coché la case prévue à cet effet.