You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python C++扩展Pyd无法导入:提示未定义PyInit_spam导出函数

解决Python扩展导入时的“dynamic module does not define module export function”错误

针对你遇到的导入失败问题,以下是几个排查和解决方向:

  • 检查模块定义结构体的一致性
    确保spammodule这个PyModuleDef结构体的模块名称字段和初始化函数后缀完全一致。比如结构体必须定义为:

    static struct PyModuleDef spammodule = {
        PyModuleDef_HEAD_INIT,
        "spam",  // 这里的名称必须和PyInit_spam的"spam"完全匹配
        NULL,
        -1,
        NULL
    };
    

    若名称不匹配,Python无法将初始化函数与对应模块关联。

  • 处理MSVC的C++名字修饰问题
    如果你的代码是用C++编译的,MSVC默认会对函数名进行修饰,即便加了__declspec(dllexport),导出的实际符号名会被修改,导致Python识别失败。解决方式是用extern "C"包裹初始化函数,强制使用C语言的符号规则:

    extern "C" {
        __declspec(dllexport) PyObject* PyInit_spam(void)
        {
            return PyModule_Create(&spammodule);
        }
    }
    

    若代码是纯C编写,也可以在项目设置中切换为C语言编译模式避免这个问题。

  • 确认.pyd文件的路径有效性
    确保spam.pyd处于Python的模块搜索路径中:

    • 直接将文件放在Python交互器当前工作目录下
    • 或者通过代码添加路径后导入:
      import sys
      sys.path.append("你的pyd文件所在目录路径")
      import spam
      
  • 验证编译依赖的Python版本匹配
    确认编译时使用的是Python 3.8.0 x64对应的头文件和库文件(python38.lib)。如果混用了不同版本或位数的Python依赖,即便文件架构显示x64,也会导致加载异常。

内容的提问来源于stack exchange,提问作者girl_coding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 11:12:49