【问题标题】:C extension not working in Python 3.7 says ImportError: dynamic module does not define module export function (PyInit_loop)C 扩展在 Python 3.7 中不起作用说 ImportError: 动态模块没有定义模块导出函数 (PyInit_loop)
【发布时间】:2019-07-26 06:08:11
【问题描述】:

我创建了一个 C 扩展来创建一个循环并打印 10 个对象。它编译成功,但是当我将它导入 python 程序并编译它时,终端给我一个错误提示:

ImportError:动态模块未定义模块导出函数(PyInit_loop)

在 Python 3.7 中使用 ubuntu 19.04。我已经创建了一个 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())

【问题讨论】:

    标签: c python-3.x virtualenv importerror


    【解决方案1】:

    本机模块的入口点(带有PyMODINIT_FUNC 的函数)的名称应基于模块名称。
    在这里,这个函数被命名为PyInit_fibonacci(),但你的模块被命名为loop
    我建议将您的函数命名为PyInit_loop()(或者将您的模块命名为fibonacci)。

    (https://docs.python.org/3/extending/building.html#c.PyInit_modulename)

    请注意,错误消息显示缺少函数的预期名称:

    ImportError: 动态模块没有定义模块导出函数(PyInit_loop)

    【讨论】:

      猜你喜欢
      • 2016-03-21
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 2021-12-23
      • 2023-03-10
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多