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

调试模式下运行嵌入Python的C++程序遇numpy导入错误求助

问题

我尝试在调试模式下运行下述C++嵌入Python的代码(Release模式可正常运行)。已链接从cpython3.10源码编译得到的python310_d.lib和python310_d.dll,并手动将其放入C:\Users\rizzo\AppData\Local\Programs\Python\Python310及\libs目录。目前使用虚拟环境中的python.exe,理论上应能自动检测库文件。

代码如下:

#define PY_SSIZE_T_CLEAN
#include <Python.h>

#include <iostream>
#include <vector>
#include <string>
#include <stdio.h> 
#include <locale>
#include <codecvt>

int main(){
    
    PyConfig config;
    PyConfig_InitIsolatedConfig(&config);

    auto venv_executable = L"C:\\Users\\rizzo\\Desktop\\TESI\\MMM_env\\Scripts\\python.exe";
    PyConfig_SetString(&config, &config.executable, venv_executable);

    auto status = Py_InitializeFromConfig(&config);
    PyConfig_Clear(&config);

    if (PyStatus_Exception(status)) {
        std::cout << "status.func: " << (status.func ? status.func : "N/A") << '\n';
        std::cout << "status.err_msg: " << (status.err_msg ? status.err_msg : "N/A") << '\n';
    }
    
    PyRun_SimpleString("import numpy; print(\"Hello World! :33333\")");
  
    return 0;
}

运行时出现如下错误:

回溯(最近的调用最后):
  文件 "C:\Users\rizzo\Desktop\TESI\MMM_env\lib\site-packages\numpy\_core\__init__.py", 第23行, in <module>
    from . import multiarray
  文件 "C:\Users\rizzo\Desktop\TESI\MMM_env\lib\site-packages\numpy\_core\multiarray.py", 第10行, in <module>
    from . import overrides
  文件 "C:\Users\rizzo\Desktop\TESI\MMM_env\lib\site-packages\numpy\_core\overrides.py", 第8行, in <module>
    from numpy._core._multiarray_umath import (
ModuleNotFoundError: 找不到名为 'numpy._core._multiarray_umath' 的模块

在处理上述异常期间,发生了另一个异常:

回溯(最近的调用最后):
  文件 "C:\Users\rizzo\Desktop\TESI\MMM_env\lib\site-packages\numpy\__init__.py", 第128行, in <module>
    from numpy.__config__ import show as show_config
  文件 "C:\Users\rizzo\Desktop\TESI\MMM_env\lib\site-packages\numpy\__config__.py", 第4行, in <module>
    from numpy._core._multiarray_umath import (
  文件 "C:\Users\rizzo\Desktop\TESI\MMM_env\lib\site-packages\numpy\_core\__init__.py", 第49行, in <module>
    raise ImportError(msg)
ImportError:

重要提示:请阅读以下内容以获取解决此问题的建议!

导入NumPy的C扩展失败。此错误可能由多种原因导致,通常与你的设置或NumPy的安装方式有关。

我们整理了一些常见原因和故障排除技巧,请参考NumPy官方文档。

请注意并检查以下内容:

  * Python版本:Python3.10,来自 "C:\Users\rizzo\Desktop\TESI\MMM_env\Scripts\python.exe"
  * NumPy版本:"2.1.1"

请确保它们是你预期的版本。请仔细研究官方文档以获取进一步帮助。

原始错误是:找不到名为 'numpy._core._multiarray_umath' 的模块


上述异常是以下异常的直接原因:

回溯(最近的调用最后):
  文件 "<string>", 第1行, in <module>
  文件 "C:\Users\rizzo\Desktop\TESI\MMM_env\lib\site-packages\numpy\__init__.py", 第133行, in <module>
    raise ImportError(msg) from e
ImportError: 导入NumPy出错:你不应从其源码目录导入NumPy;请退出NumPy源码树,然后从那里重新启动Python解释器。

C:\Users\rizzo\Desktop\TESI\dependencies_test\build\Debug\python_cpp.exe (进程 15864) 已退出,代码为 0 (0x0)。
若要在调试停止时自动关闭控制台,请启用“工具->选项->调试->调试停止时自动关闭控制台”。
按任意键关闭此窗口...

请问有解决思路吗?

解决思路
  • 调试版Python与Release版NumPy不兼容:你使用的是调试版python310_d.dll,但虚拟环境中的NumPy是针对Release版Python编译的C扩展(_multiarray_umath.pyd这类文件为Release版本)。调试版Python无法加载Release版的C扩展模块,这是核心问题。解决方向二选一:要么给虚拟环境安装调试版NumPy,要么改用Release版Python库编译你的C程序(同时开启C项目的调试信息,不影响调试流程)。
  • 手动确认模块路径:调试版Python可能无法自动识别虚拟环境的site-packages路径,可在Py_InitializeFromConfig之后添加代码手动添加路径:
    PyRun_SimpleString("import sys; sys.path.append('C:\\Users\\rizzo\\Desktop\\TESI\\MMM_env\\lib\\site-packages')");
    
  • 匹配编译配置:确保你编译cpython3.10时的配置与虚拟环境Python完全一致(比如同为64位、使用相同版本的MSVC编译器),配置不匹配会导致C扩展加载失败。
  • 编译调试版NumPy:如果坚持使用调试版Python,需要从NumPy源码编译调试版本。编译时使用调试版Python执行编译脚本,比如用python_d.exe运行NumPy的setup.py,确保生成的C扩展是调试兼容版本。
  • 检查文件完整性与权限:确认python310_d.dll能被程序正确加载,虚拟环境中NumPy的_multiarray_umath.pyd文件存在且未损坏,同时检查程序调试时的工作目录是否正确,避免路径解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:02:34