[Baypiggies] Opinions on Pyrex vs. ctypes vs. SWIG and whatever else binds to dynamic/shared libs

nar nar at hush.com
Mon Dec 29 21:23:43 CET 2008

Hi guys,

Long time lurker, first time poster -- I've got a question that has  
been bugging me for a while and I figured I'd roll it out here to see  
what opinions people may have.

I've done a bit of work with Python binding to DLLs on Windows and  
shared libraries on Linux/OSX, but I've mostly taken the ctypes route  
using GCC-XML to generate wrapper code for me. It would seem that most  
cheese shop modules use Pyrex with hand coded wrappers or SWIG to half  
auto-gen the wrappers and finish off with hand fix-ups.

Since ctypes ships with Python I kind of assumed it would be the  
'default' way of performing this task, but most people seem to like  
Pyrex and a minority of people seem to use SWIG but hate it.

I suspect the question is similar to asking 'Which is better, vi or  
emacs?', but I'd like to hear what other people are doing / have done  
and why they prefer it?

For those unfamiliar with ctypes / ctypeslib here's the process:

0) Install gccxml
1) Install ctypeslib module if it's not on your system, this will put  
h2xml.py and xml2py.py on your system
2) h2xml.py -I/path/to/includes SomeIncludeFile.h -o SomeIncludeFile.xml
3) xml2py.py SomeIncludeFile.xml -o NewPythonModule.py

There's a bit of fiddling you can do with the h2xml stuff as far as  
preprocessing, but that's roughly what it takes. You still need to  
hand-fix the generated wrapper code to make it 'pythonic' if thats  
your flavor, since it passes C-type variables in and out, but it still  
seems like a better development flow than using Pyrex/SWIG, but there  
may be factors I'm unaware of. (Which is why I'm asking here!)

Hopefully this isn't too off topic for the list, I look forward to the  


Nathan Ramella
nar <> @ <> hush.com

More information about the Baypiggies mailing list