Python import error for PyInit_wpaspy

Jared Bents <[email protected]>
Newsgroups gmane.linux.drivers.hostap
Message-ID <CAM=7fbcPzoWjyzWUDt9hR1X7biFbhqMtRC2revfLQHfTc+Herw@mail.gmail.com>
Hi all,

I'm attempting to cross compile wpaspy with Buildroot and when I
attempt to import it on the system I compiled it for, I get the
following error

# python3
Python 3.8.1 (default, Mar 30 2020, 09:50:30)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import wpaspy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dynamic module does not define module export function ()

From initial searches on the internet, I thought I was possibly
accidentally using python 2 instead of python 3 during the compile
step which would cause the error. However, I looked at my build output
and added a python version print to the setup.py and both checked out.

Part of the build output showing that python 3.8.1 is used to build

PYTHONPATH="/accts/jmbents/rclinux/target_build/apm86290_common_platform_debug_defconfig/target/usr/lib/python3.8/"
PYTHONNOUSERSITE=1
_PYTHON_SYSCONFIGDATA_NAME="_sysconfigdata__linux_powerpc-linux-gnu"
_python_sysroot=/accts/jmbents/rclinux/target_build/apm86290_common_platform_debug_defconfig/host/powerpc-buildroot-linux-gnu/sysroot
_python_prefix=/usr _python_exec_prefix=/usr
/accts/jmbents/rclinux/target_build/apm86290_common_platform_debug_defconfig/host/bin/python
setup.py build --executable=/usr/bin/python )
Python version3.8.1 (default, Mar 30 2020, 09:47:30).
[GCC 7.4.0]
running build
running build_ext

Below is my verification of the symlinks provided by Buildroot

jmbents@gravy:~/rclinux/target_build/apm86290_common_platform_debug_defconfig$
ls -l /accts/jmbents/rclinux/target_build/apm86290_common_platform_debug_defconfig/host/bin/python
lrwxrwxrwx 1 jmbents genusers 7 Mar 30 09:47
/accts/jmbents/rclinux/target_build/apm86290_common_platform_debug_defconfig/host/bin/python
-> python3
jmbents@gravy:~/rclinux/target_build/apm86290_common_platform_debug_defconfig$
ls -l /accts/jmbents/rclinux/target_build/apm86290_common_platform_debug_defconfig/host/bin/python3
lrwxrwxrwx 1 jmbents genusers 9 Mar 30 09:47
/accts/jmbents/rclinux/target_build/apm86290_common_platform_debug_defconfig/host/bin/python3
-> python3.8

Has anyone had success cross compiling wpaspy with python 3 support? I
had run into a couple prior problems when using python 3 but sorted
those out and once I get everything working, I plan on upstreaming
them. I've included the diffs below for reference.

diff --git a/wpaspy/wpaspy.c b/wpaspy/wpaspy.c
index 278089b48..8a7c1fe1a 100644
--- a/wpaspy/wpaspy.c
+++ b/wpaspy/wpaspy.c
@@ -44,8 +44,8 @@ static void wpaspy_close(struct wpaspy_obj *self)
 >......>.......self->ctrl = NULL;
 >......}
.
->......if (self->ob_type)
->......>.......self->ob_type->tp_free((PyObject *) self);
+>......if (Py_TYPE(self))
+>......>.......Py_TYPE(self)->tp_free((PyObject *) self);
 }
.
.
@@ -198,12 +198,22 @@ static PyMethodDef module_methods[] = {
 };
.
.
+static struct PyModuleDef wpaspy =
+{
+    PyModuleDef_HEAD_INIT,
+    "wpaspy",
+    "",
+    -1,
+    module_methods
+};
+
+
 PyMODINIT_FUNC initwpaspy(void)
 {
 >......PyObject *mod;
.
 >......PyType_Ready(&wpaspy_ctrl);
->......mod = Py_InitModule("wpaspy", module_methods);
+>......mod = PyModule_Create(&wpaspy);
 >......wpaspy_error = PyErr_NewException("wpaspy.error", NULL, NULL);
.
 >......Py_INCREF(&wpaspy_ctrl);

Thank you,
Jared
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.