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

Python转Cython生成DLL后在C++调用时遇torch模块找不到错误

解决C++调用Cython封装PyTorch模块时的ModuleNotFoundError问题

嘿,我碰到过类似的坑,你这个ModuleNotFoundError: No module named 'torch'本质是因为C++进程没正确关联到你装了PyTorch的Anaconda环境,下面给你一步步捋清楚解决办法:

问题根源

当你从C++调用Python/Cython模块时,系统默认会用全局的Python环境,而非你安装PyTorch的Anaconda环境;再加上Python初始化时没把Anaconda的包路径纳入搜索范围,自然就找不到torch模块了。

具体解决步骤

1. 让Visual Studio绑定Anaconda的Python环境

  • 打开你的C项目属性,找到**VC目录**:
    • 把Anaconda的include目录(比如C:\Anaconda3\include)加到包含目录的最顶端
    • 把Anaconda的libs目录(比如C:\Anaconda3\libs)加到库目录的最顶端
  • 接着在调试->环境里,给PATH添加Anaconda的优先级路径:
    PATH=C:\Anaconda3;C:\Anaconda3\Scripts;C:\Anaconda3\Library\bin;%PATH%
    
    这样每次运行程序时,系统会优先调用Anaconda的Python相关文件。

2. 在C++代码里手动注入PyTorch的包路径

在Py_Initialize()之后,把Anaconda的site-packages目录强行加到Python的sys.path里,确保Python能定位到torch模块。修改你的CppTest.cpp:

#include "stdafx.h"
#include "Python.h"
#include "C_Test.h"
#include <string>

int main() {
    Py_Initialize();
    
    // 手动添加Anaconda的site-packages路径到Python搜索范围
    PyObject* sys_path = PySys_GetObject((char*)"path");
    std::string site_packages = "C:\\Anaconda3\\Lib\\site-packages";
    PyList_Append(sys_path, PyUnicode_FromString(site_packages.c_str()));
    
    testdll();
    
    getchar();
    Py_Finalize(); // 别忘了清理Python环境
    return 0;
}

3. 用Anaconda环境编译Cython模块

别用系统默认的命令提示符跑编译命令,打开Anaconda Prompt,切换到你的项目目录再执行:

python setup.py build_ext --inplace

这样生成的Cython模块才会和Anaconda环境绑定,不会出现环境不匹配的问题。

验证修改

重新编译你的C_Test.dll和C++项目,运行后应该能正常输出:

Py_Initialize Done!
Hello!
0.4.0
World!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:17:02