24.2 Extending Python Without Python's C API
You can code Python extensions in
other classic compiled languages besides C. For Fortran, the choice
is between Paul Dubois's Pyfort (available at
http://pyfortran.sf.net) and
Pearu Peterson's F2PY (available at http://cens.ioc.ee/projects/f2py2e/). Both
packages support and require the Numeric package
covered in Chapter 15, since numeric processing is
Fortran's typical application area.
For C++, the choice is between Gordon
McMillan's simple, lightweight SCXX (available at
http://www.mcmillan-inc.com/scxx.html), which
uses no templates and is thus suitable for older C++ compilers, Paul
Dubois's CXX (available at http://cxx.sf.net), and David
Abrahams's Boost Python Library (available at
http://www.boost.org/libs/python/doc). Boost
is a package of C++ libraries of uniformly high quality for compilers
that support templates well, and includes the Boost Python component.
Paul Dubois, CXX's author, recommends considering
Boost. You may also choose to use Python's C API
from your C++ code, using C++ in this respect as if it was C, and
foregoing the extra convenience that C++ affords. However, if
you're already using C++ rather than C anyway, then
using SCXX, CXX, or Boost can substantially improve your programming
productivity when compared to using Python's C API.
If
your Python extension is basically a wrapper over an existing C or
C++ library (as many are), consider SWIG, the Simplified Wrapper and
Interface Generator (available at http://www.swig.org). SWIG generates the C
source code for your extension based on the
library's header files, generally with some help in
terms of further annotations in an interface description file.
Greg Ewing is developing a language, Pyrex, specifically for coding
Python extensions. Pyrex (found at http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/)
is an interesting mix of Python and C concepts, and is already quite
usable despite being a new development.
The weave package (available at http://www.scipy.org/site_content/weave),
lets you run inline C/C++ code within Python. The
blitz function, in particular, generates and runs
C++ code from expressions using the Numeric
package, and thus requires Numeric.
If your application runs only on
Windows, the most practical way to extend and embed Python is
generally through COM. In particular, COM is by far the best way to
use Visual Basic modules (packaged as ActiveX classes) from Python.
COM is also the best way to make Python-coded functionality (packaged
as COM servers) available to Visual Basic programs. The standard
Python distribution for Windows does not directly support COM: you
also need to download and install the platform-specific
win32all extension package (available at
http://starship.python.net/crew/mhammond/). I
do not cover Windows-specific functionality, including COM, any
further in this book. For excellent coverage of platform-specific
Python use on Windows, I recommend Python Programming on
Win32, by Mark Hammond and Andy Robinson
(O'Reilly).
|