[Python-de] wrapper für C

Hans-Peter Jansen hpj at urpla.net
Sa Mai 5 23:16:24 UTC 2007


Am Samstag, 5. Mai 2007 20:49 schrieb Berthold Höllmann:
>
> Je nach Platform, Python Umgebung und API Gestaltung der C Funktionen
> bieten sich da verschiedene Wege an.
>
> Die Standard Python Dokumentation beschreibt das vorgehen mit Hilfe
> der Python C API eigendlich recht ausführlich und ausreichend.
>
> Has du deine C Funktionalität in einer Dynamisch Linkbaren Bibliothek
> unter Windows, Linux oder Mac OS X vorliegen (bei anderen UNIXen bin
> ich mir unsicher) ist die ab Python 2.5 zum Standardlieferumfang
> gehörende Bibliothek "ctypes" zwei oder drei Blicke Wert.
>
> In einer Umgebung in der größere Datenmengen in Vektor oder Matrix
> Form herumgereicht werden sollen, NumPy/SciPy bietet verschiedene
> Mechanismen. Einige Erfahrung habe ich mit f2py, ursprünglich für das
> Wrappen von FORTRAN Code gedacht, kann man inzwischen auch C
> Funktionen behandeln. Bei SciPy dabei ist "weave". Hier werden die
> Wrapper inline im Python Code definiert.
>
> Des weiteren bieten sich noch an
>
> CXX
> boost.python (beide C++)
> SWIG (C und C++ für verschiedene Scriptsprachen)
> pyrex
>
> und alles was ich vergessen habe.
>
> Es gibt nicht den goldenen Weg. Ausgehende von deinen Anforderungen
> mußt du dich für eine Methode entscheiden.
>
> Hier noch ein paar Links:
>
>  + C API <http://docs.python.org/api/api.html>
>
>  + ctypes <http://docs.python.org/lib/module-ctypes.html>
>
>  + CXX <http://cxx.sourceforge.net/>
>
>  + numpy/f2py <http://cens.ioc.ee/projects/f2py2e/>
>
>  + pyrex <http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/>
>
>  + weave <http://scipy.org/Weave>
>
>  + SWIG <http://swig.sourceforge.net/>
>
>  + Boost.Python <http://boost.org/libs/python/doc/index.html>

Das dabei immer sip <http://www.riverbankcomputing.co.uk/sip/index.php>
fehlen muß, kann ich nicht verstehen, obwohl 
 - damit die recht populären PyQt3, PyQt4, PyKDE und PyQwt Projekte
   realisiert wurden
 - es sehr effizienten Code erstellt (typisch eine .so/.dll pro Modul,
   keine Extra-Python Hilfsmodule)
 - und es trotzdem recht einfach zu handhaben ist. 

Ansonsten ist Deine Antwort eine eins mit Sternchen wert, Bertold ;-)

Pete