Python dll Extension Import
Solution 1
Follow Building C and C++ Extensions on Windows carefully - in sub-section 7, it says:
The output file should be called spam.pyd (in Release mode) or spam_d.pyd (in Debug mode). The extension .pyd was chosen to avoid confusion with a system library spam.dll to which your module could be a Python interface
...
Changed in version 2.5: Previously, file names like spam.dll (in release mode) or spam_d.dll (in debug mode) were also recognized.
Try the renaming your DLL
to use a .pyd
extension instead of .dll
.
(thanks, Peter Hansen)
The reference points to a C
example, which explicitly includes an INIT function,
PyMODINIT_FUNC initexample(void)
. The resulting DLL should be renamed example.pyd
:
#include "Python.h"
static PyObject *
ex_foo(PyObject *self, PyObject *args)
{
printf("Hello, world\n");
Py_INCREF(Py_None);
return Py_None;
}
static PyMethodDef example_methods[] = {
{"foo", ex_foo, METH_VARARGS, "foo() doc string"},
{NULL, NULL}
};
PyMODINIT_FUNC
initexample(void)
{
Py_InitModule("example", example_methods);
}
Solution 2
Aarrgghh! Yet another 2.X/3.X gotcha. RTFErrorMessage:
ImportError: dynamic module does not define init function (PyInit_abcPython)
Note the prefix: it's not init, it's PyInit_
See the 3.1 docs ... "The initialization function must be named PyInit_name(), where name is the name of the module"
Solution 3
Simple renaming of .dll to .pyd did not help. I was using SWIG to create the extension module. I created a .pyd instead of creating a .dll module and that solved the issue.
Admin
Updated on June 12, 2022Comments
-
Admin almost 2 years
I created extensions for my Python and created a
abcPython.dll
. How can I import this dll into my Python scripts?I get an error message when I try to import it usin the following command
>>>import abcPython >>>Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named abcPython >>>
I manually created a system environment variable named
PYTHONPATH
which stores the path to theabcPython.dll
, but still the error remains.How can I fix this?