[pypy-dev] using libffi from rpython - a better way?

Ryan Kelly ryan at rfk.id.au
Thu Jun 17 12:02:55 CEST 2010

Hi All,

  First, let me say that PyPy just rocked my world.  I develop an
auto-update framework for frozen python applications [1] and have
started using PyPy to compile parts of the app into stand-alone
executables.  I got it up and running in under two days, and it shaves
several MB off the size of my frozen apps - so thanks for some awesome

  I'm currently using libffi to dynamically find and load a python DLL
from within an RPython program.  It works well but the code seems very
verbose to someone who's used to working with ctypes.  I'm hoping
there's a better way...

  Here's a trimmed-down example of the sort of thing I'm doing::

      import ctypes.util
      libpython = ctypes.util.find_library("python2.6")

      from pypy.rlib.libffi import *
      from pypy.rpython.lltypesystem import rffi, lltype

      def target(*args):
          def entry_point(argv):

              #  Find the python DLL and extract needed functions
              py = CDLL(libpython)
              Py_Initialize = py.getpointer("Py_Initialize",[],ffi_type_void)
              Py_Finalize = py.getpointer("Py_Finalize",[],ffi_type_void)
              PyRun_SimpleString = py.getpointer("PyRun_SimpleString",[ffi_type_pointer],ffi_type_sint)

              #  Bootstrap into running a python program
              buf = rffi.str2charp("print 'hello from python!'")
              return 0

          return entry_point,None

  As you can imagine, the real application has a lot more of these
boilerplate declarations.  Any suggestions on how to do this in
less/cleaner code?



[1]  http://pypi.python.org/pypi/esky/

Ryan Kelly
http://www.rfk.id.au  |  This message is digitally signed. Please visit
ryan at rfk.id.au        |  http://www.rfk.id.au/ramblings/gpg/ for details

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
URL: <http://mail.python.org/pipermail/pypy-dev/attachments/20100617/8dd79090/attachment.pgp>

More information about the Pypy-dev mailing list