[SciPy-user] FYI: C++ Extensions for Python

Bob Ippolito bob at redivi.com
Mon Nov 1 17:51:14 CST 2004


On Nov 1, 2004, at 17:51, David Grant wrote:

> Just thought I'd share my experiences concerning looking for a way to 
> make python interfaces for C++ code (see my previous thread about 
> this):
>
> pycxx - Looks like it requires one to modify all the C++ source, 
> adding PyObject pointers everywhere.  I stayed away from this.  I 
> don't want to modify the code if I have to (why should I have to?  the 
> reason I'm making an interface is so that I can use the C++ code, and 
> not touch it, thus avoiding creating bugs in the C++ code.  If I 
> WANTED to touch the C++ code I'd just re-write in python).
>
> boost.python - Horrible documentation and horrible setup.  Nothing 
> good to say about this.  I spent more time on this than any other 
> method and made the least progress.
>
> weave - was going to write a python routine which had some small piece 
> weave code.  The weave code would be talking to a C++ library or 
> compiled python extension or something.  I was able to make a C++ 
> library containing all my C++ code but then abandoned it after that, 
> to see if there were simpler methods
>
> python.org method - http://docs.python.org/ext/simpleExample.html - 
> Similar to pycxx it involved altering the code
>
> swig - at first it seemed like a lot of work to copy everything from 
> the .h files into the .i file.  But then I realized you can just use 
> %include and it will use that stuff for swig.  Simple examples are 
> given in the docs for both C and C++ which work well.  I like how it 
> just generates an extra .c wrapper file which is then compiled to a .o 
> file and linked together will all the other .o files and libraries 
> (like -llapack) into a python extension, very simply.  Extend any 
> methods or functions you want.  I had a problem because the C++ class 
> overloaded the operator+ method, but there is any easy to fix that in 
> the docs, calling the python wrapper __add__ instead.
>
> So far swig is my choice.  Boost.python looked good but I simple 
> couldn't get bjam to work!

Uh, where does it say that you need to use bjam?  It works just fine 
outside of that environment...  take a look at Fusion 
<http://itamarst.org/software/> for example.

-bob



More information about the SciPy-user mailing list