C extension not working in Python 3.7 says ImportError: dynamic module does not define module export function (PyInit_loop)
C extension not working in Python 3.7 says ImportError: dynamic module does not define module export function (PyInit_loop)
我创建了一个 C 扩展来创建一个循环并打印 10 个对象。它编译成功但是当我将它导入 python 程序并编译它时终端给我一个错误说:
ImportError: 动态模块没有定义模块导出函数(PyInit_loop)
使用 ubuntu 19.04 和 Python 3.7。我创建了一个 virtualenv,我正在其中完成所有工作。在任何地方都找不到具体的解决方案,但有人说 C 文件与我系统中的 Python2.7 挂钩,但由于我使用的是 virtualenv,所以我不希望出现这种情况。第一次做。
这是我的 C 扩展文件
#include <Python.h>
#include <stdio.h>
static PyObject* loop(PyObject* self)
{
int i =0;
for(i=0;i<10;i++)
{
printf("The number is %d\n",i);
}
Py_RETURN_NONE;
}
static char loop_docs[] = "loop(): This function is going to create a printing loop for 10 times.\n";
static PyMethodDef loop_methods[] = {
{"loop", (PyCFunction)loop, METH_NOARGS, loop_docs},
{NULL}
};
static struct PyModuleDef loop_module_def =
{
PyModuleDef_HEAD_INIT,
"loop",
"Module that is still in development",
-1,
loop_methods
};
PyMODINIT_FUNC PyInit_fibonacci(void){
Py_Initialize();
return PyModule_Create(&loop_module_def);
}
这是我的setup.py
from distutils.core import setup, Extension
setup(name='loop', version='1.0',ext_modules=[Extension('loop', ['loop.c'])])
这是我正在尝试的文件运行
import loop #<- Here Error Occurs
print(loop.loop())
您的本机模块(具有 PyMODINIT_FUNC
的函数)的入口点应该有一个基于模块名称的名称。
在这里,这个函数被命名为 PyInit_fibonacci()
但你的模块被命名为 loop
.
我建议将您的函数命名为 PyInit_loop()
(或者将您的模块命名为 fibonacci
)。
(https://docs.python.org/3/extending/building.html#c.PyInit_modulename)
请注意,错误消息显示了缺失函数的预期名称:
ImportError: dynamic module does not define module export function (PyInit_loop)
我创建了一个 C 扩展来创建一个循环并打印 10 个对象。它编译成功但是当我将它导入 python 程序并编译它时终端给我一个错误说:
ImportError: 动态模块没有定义模块导出函数(PyInit_loop)
使用 ubuntu 19.04 和 Python 3.7。我创建了一个 virtualenv,我正在其中完成所有工作。在任何地方都找不到具体的解决方案,但有人说 C 文件与我系统中的 Python2.7 挂钩,但由于我使用的是 virtualenv,所以我不希望出现这种情况。第一次做。
这是我的 C 扩展文件
#include <Python.h>
#include <stdio.h>
static PyObject* loop(PyObject* self)
{
int i =0;
for(i=0;i<10;i++)
{
printf("The number is %d\n",i);
}
Py_RETURN_NONE;
}
static char loop_docs[] = "loop(): This function is going to create a printing loop for 10 times.\n";
static PyMethodDef loop_methods[] = {
{"loop", (PyCFunction)loop, METH_NOARGS, loop_docs},
{NULL}
};
static struct PyModuleDef loop_module_def =
{
PyModuleDef_HEAD_INIT,
"loop",
"Module that is still in development",
-1,
loop_methods
};
PyMODINIT_FUNC PyInit_fibonacci(void){
Py_Initialize();
return PyModule_Create(&loop_module_def);
}
这是我的setup.py
from distutils.core import setup, Extension
setup(name='loop', version='1.0',ext_modules=[Extension('loop', ['loop.c'])])
这是我正在尝试的文件运行
import loop #<- Here Error Occurs
print(loop.loop())
您的本机模块(具有 PyMODINIT_FUNC
的函数)的入口点应该有一个基于模块名称的名称。
在这里,这个函数被命名为 PyInit_fibonacci()
但你的模块被命名为 loop
.
我建议将您的函数命名为 PyInit_loop()
(或者将您的模块命名为 fibonacci
)。
(https://docs.python.org/3/extending/building.html#c.PyInit_modulename)
请注意,错误消息显示了缺失函数的预期名称:
ImportError: dynamic module does not define module export function (PyInit_loop)