How to make a *.pyd or a DLL of several modules?
Adrian Eyre
a.eyre at optichrome.com
Wed Mar 15 08:55:48 EST 2000
> I have several Python modules and want to put them into a PYD or
> into a DLL. Freezing only supports executeables, so how can i make
> one DLL of these modules? Importing that DLL should be the same
> like importing all Modules.
It's fairly straightforward to import all modules into sys.modules,
you just call Py_InitModule() for each module.
Putting them into the namespace of the import call is a bit more
tricky though.
Try something like this (works for me on win32):
#include <Python.h>
#include <stdio.h>
static PyObject* foo_meth1(PyObject* self, PyObject* args)
{
printf("foo_meth1\n");
Py_INCREF(Py_None);
return Py_None;
}
static PyObject* foo_meth2(PyObject* self, PyObject* args)
{
printf("foo_meth2\n");
Py_INCREF(Py_None);
return Py_None;
}
static PyObject* bar_meth1(PyObject* self, PyObject* args)
{
printf("bar_meth1\n");
Py_INCREF(Py_None);
return Py_None;
}
static PyObject* bar_meth2(PyObject* self, PyObject* args)
{
printf("bar_meth2\n");
Py_INCREF(Py_None);
return Py_None;
}
static PyMethodDef foo_methods[] = {
{ "meth1", foo_meth1, METH_VARARGS },
{ "meth2", foo_meth2, METH_VARARGS },
{ NULL, NULL }
};
static PyMethodDef bar_methods[] = {
{ "meth1", bar_meth1, METH_VARARGS },
{ "meth2", bar_meth2, METH_VARARGS },
{ NULL, NULL }
};
void _declspec(dllexport) initfoo()
{
PyObject* locals = PyEval_GetLocals();
PyObject* barmod;
Py_InitModule("foo", foo_methods); /* This one is done for you */
barmod = Py_InitModule("bar", bar_methods);
PyDict_SetItemString(locals, "bar", barmod);
Py_INCREF(barmod);
}
More information about the Python-list
mailing list