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