python modules

Mathieu Prevot mathieu.prevot at gmail.com
Fri Jul 13 20:34:22 UTC 2007


2007/7/13, Mike Meyer <mwm at mired.org>:
> On Fri, 13 Jul 2007 21:12:33 +0200 "Mathieu Prevot" <mathieu.prevot at gmail.com> wrote:
>
> This apparently got redirected without sufficient context, so I'm
> guessing.

I forgot to cc to hackers.

> > 2007/7/13, Mathieu Prevot <mprevot at freebsd.org>:
> > > I learn that modules loaded with import fall into 4 general categories:
> > > - code written in Python (.py)
> > > - C or C++ extensions that have been compiled into shared libraries (or DLLs)
>
> These are *Python extensions* written in C or C++ (among other
> things), not arbitrary shared object libraries (or .so's).
>
> > > - Packages containing  collection of modules
> > > - Built-in modles writen in C and linked into the Python interpreter
> > > Why don't we use directly the libpmc library in C instead of rewritting
> > > things in python  ?
>
> Are you writing in Python now and want to use libpmc? Doing that is
> one approach.

I'm doing this. This approach _seems_ to be the easier way.

> > I copied libpmc.so and tryed  'import libpmc'. I have:
> > ImportError: dynamic module does not define init function (initlibpmc)
>
> To be expected. The init function is part of what turns it into a
> Python extension library.
>
> > Are we really far from having a libpmc module ?
>
> There are at least two other approaches to getting access to libpmc
> from Python:
>
> 1) Write a wrapper library that is a Python extensions and translates
>    calls.

This work is in progress in fact, but I wanted to have ASAP access to
pmc(3) with a minimum of (keyboard) effort.  I don't care of
docstrings.

> 2) Use the ctypes python module to access libpmc. ctypes has been
>    bundled into 2.5, so that would be my preference. Just one less
>    thing to install.
>
> This is probably more appropriate in c.l.python, but it's hard to say
> without context.

I didn't tryed this module, rather (a bit) the ezpyinline module,
coupled to `gcc -E /usr/src/lib/libpmc/libpmc.c` (no preprocessing
with the module, only compilation).

The ezpyinline module work like this:

----
    #!/usr/bin/python
    import ezpyinline

    #step 1
    code = r"""
        int helloworld() {
            printf("hello ezpyinline!
    ");
        }
    """
    #step 2
    ezc = ezpyinline.C(code)

    #step 3
    ezc.helloworld()
----

I'll give ctypes a chance (when I have time :) )... thanks

Mathieu


More information about the freebsd-hackers mailing list