Le 15 nov. 2011 à 15:24, Jim Bosch a écrit :
> On Nov 15, 2011 8:53 AM, "Olivier Voyer" <[email protected]> wrote:
> >
> > Hi everyone,
> >
> > Is it possible to have multiple modules linking to one single pyd file? I'm
> > using SWIG with VS2010 and I can't find a way of doing that.
> >
>
> I believe this is not supported by the Python C-API itself, regardless of
> what wrapper generator or library you use. The name of the module import
> function needs to be related to the loadable module file name, and you
> generally can't have two functions for which that's true.
But you can put several submodules in an extension module, as a workaround (see
code below). I always wondered if that was possible with boost::python or SWIG ?
#include <Python.h>
static PyObject *myfunc(PyObject *self, PyObject *args)
{
if (!PyArg_ParseTuple(args, "|myfunc"))
return NULL;
printf("Hello, world\n");
Py_INCREF(Py_None);
return Py_None;
}
static PyMethodDef functions[] = {
{ "myfunc", (PyCFunction)myfunc, METH_VARARGS, "" },
{ NULL }
};
static PyMethodDef nofunctions[] = {
{ NULL }
};
void inittestmod()
{
PyObject *mdl, *submdl;
if (!(mdl = Py_InitModule3("testmod", nofunctions, "")))
return;
if (!(submdl = Py_InitModule3("foo", functions, "")))
return;
Py_INCREF(submdl);
PyModule_AddObject(mdl, "foo", submdl);
}
After building,
>>> import testmod
>>> testmod.foo.myfunc()
Hello, world
>>>
_______________________________________________
Cplusplus-sig mailing list
[email protected]
http://mail.python.org/mailman/listinfo/cplusplus-sig