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

如何在C中导入含numpy等第三方包的.py文件?问题排查与解决

Python-C-API调用含Numpy的Python脚本报错解决

场景与代码

使用Visual Studio,通过Python-C-API从C/C++文件导入Python脚本,调用PythonApplication7.py中定义的lalala函数。

C文件代码

#include <Python.h>

int main() {
    PyObject* pModule, * pFunc;
    int a = 10, b = 20;
    int result;

    Py_Initialize();
    pModule = PyImport_ImportModule("PythonApplication8");//here, import a python file without 3rd party package
    if (!pModule) {
        PyErr_Print(); //print error
    }

    pFunc = PyObject_GetAttrString(pModule, "func1");
    if (!pFunc || !PyCallable_Check(pFunc)) {
        PyErr_Print();
        Py_XDECREF(pModule); 
    }

    PyObject* pValue1 = Py_BuildValue("i", a);
    PyObject* pValue2 = Py_BuildValue("i", b);

    if (!pValue1 || !pValue2) {
        Py_XDECREF(pValue1);
        Py_XDECREF(pValue2);
    }

    PyObject* pArgs = PyTuple_New(2);
    PyTuple_SetItem(pArgs, 0, pValue1);
    PyTuple_SetItem(pArgs, 1, pValue2);

    PyObject* pValue = PyObject_CallObject(pFunc, pArgs);
    PyArg_Parse(pValue, "i", &result);

    printf("The result is: %d\n", result);

    Py_Finalize();

    return 0;

}

同目录下PythonApplication8.py代码

import PythonApplication7 as p

def func1(a,b):
    return p.lalala(a,b)

PythonApplication7.py代码

import math
import numpy
def lalala(a,b):
    return a+b

c=math.sqrt(1)

问题现象

  • 未导入numpy时,C与Python间可正常传参并获取函数输出
  • 导入numpy后触发错误:ModuleNotFoundError: No module named'numpy.core._multiarray_umath',附带提示无法从numpy源码目录导入该模块

已执行的排查操作

  • 将包含numpy的Python DLLs、Lib目录文件复制到C编译后的exe同目录
  • 采用Python 3.9版本,VS中已配置对应Python的包含路径和库路径
  • 直接在Python环境中导入numpy无异常
  • 查阅官方排查文档后未找到解决办法

最终解决方法

12月24日更新:移除VS链接器中添加的python39_d.dll附加依赖(调试符号文件),保留其他默认链接器设置后,问题得到解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:00:28