Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / interfacer du C avec python

interfacer du C avec python

Remonter à Forum général Python
  • interfacer du C avec python

    Envoyé par awalter1 le 6 Novembre 2007 à 16:58
    Bonjour,

    Je dois faire une IHM en pygtk qui va me permettre de lancer des fonctions développées en C.
    Je développe sous HPUX (unix).
    J'ai vu qu'il existait Pyrex.
    Quelqu'un l'a t'il déjà expérimenté ? est ce sous license ?
    Existe t'il autre chose de simple ?

    Merci

    PS : existe t'il en python, une librairie pour des fonctions de projection : latitude/longitude en stereographic, intersection de segments définies en lat/long ...
    • Re: interfacer du C avec python

      Envoyé par alexd le 6 Novembre 2007 à 19:37
      Bonsoir,

      Il existe plusieurs possibilités pour "wrapper" des fonctions C:

      - Dans la librairie standard (Python >= 2.5) tu trouveras ctypes qui te permet d'accéder à ces fonction directement à partir de python


      from ctypes import *

      dll = cdll.LoadLibrary('\\chemin\\vers\\malibrairie.so')
      dll.mafonction(1, 2.0, '3', u'4') # Les types python sont convertis en équivalent C


      - Sinon il faut écrire un module d'extension en C et il existe plusieurs outils pour cela

      - Pyrex est un langage mixant python et le typage c, un fichier écrit dans ce langage est converti en c, puis est compilé en code natif par le compilateur de ton choix. Il permet d'exposer des fonctions C existantes tout comme créer une extension à partir de rien. Le contenu généré par Pyrex est libre d'utilisation dans un projet libre ou commercial. Néammoins, Pyrex et maintenant dépassé par Cython au niveau des fonctionnalités et des optimisations ( http://www.cython.org/ ).

      - SWIG et SIP créé le module d'extension C à partir d'un fichier d'interface décrivant les fonctions C/C++ que l'on veut exposer. A noter que seuls ces derniers prennent en charge le C++.

      Perso, j'ai déjà utilisé ctypes et Pyrex/Cython et je te recommande les deux.
      Cython étant plus performant que ctypes car le code glue est écrit en C, mais ctypes est plus simple et ne requiert pas de compilation séparée.

      Pour SWIG je laisserai quelqu'un de plus expérimenté t'en parler
    • Re: interfacer du C avec python

      Envoyé par awalter1 le 7 Novembre 2007 à 10:38
      Merci beaucoup de ces précisions. Je vais me concentrer dans un premier temps sur ctypes
Rendu par Ploneboard