执行 import torch 触发ModuleNotFoundError: No module named 'torch._C',该报错代表 PyTorch 的 C++ 核心扩展模块 torch._C 加载失败,并不是单纯缺少 Python 源码文件,高频诱因是包安装损坏、跨平台包混用、pip/conda 多环境冲突、手动修改 torch 目录、NFS 磁盘 IO 异常、源码编译失败;排查顺序优先确认当前 Python 进程加载的 torch 路径,再检查包内的扩展 so/pyd 文件是否完整,不要只反复执行 pip install 而不清掉残留坏包。torch._C 是 PyTorch 最底层 C 扩展,所有 CUDA、算子、自动微分能力都依赖它;如果安装中途断网、磁盘满、解压失败、直接复制别的机器的 torch 包,就会缺失_C.so(Linux)或_C.pyd(Windows)。很多时候 pip 显示安装成功,但二进制扩展文件残缺,Python 导入时就报这个模块找不到。
报错基础信息清单
- 报错原文:ModuleNotFoundError: No module named 'torch._C'
- 模块性质:torch._C 是内置 C++ 扩展,不是 pip 独立包
- 最高频诱因:PyTorch 安装包不完整、二进制扩展丢失
- 次要诱因:多版本 torch 共存、Python 环境 PATH 错乱、跨架构包混用(x86 包装在 ARM)、源码编译未开启 BUILD_SHARED_LIBS、容器镜像损坏
- 定位路径命令:
python -c "import torch; print(torch.__file__)"
- 查找核心扩展:
find $(python -c "import torch,os;print(os.path.dirname(torch.__file__))") -name "_C.so"
Linux 下找不到_C.so即可判定包损坏。
分步排查流程
- 确认当前加载的 torch 路径,判断是不是预期 conda/venv 环境里的包,避免全局、conda、用户目录多版本互相覆盖。
- 查找_C.so,无输出说明包残缺,直接进入重装流程。
- 彻底卸载、清理缓存与残留目录:
pip uninstall -y torch torchvision torchaudio
pip cache purge
手动删除残留torch目录(如果find还能搜到)
rm -rf $(python -c "import torch,os;print(os.path.dirname(torch.__file__))")
- 从 PyTorch 官网拉取和 CUDA、Python、架构匹配的安装命令,不要直接 pip install torch(容易拉错架构 / CPU 包)。
- 容器 / 集群 NFS 场景:NFS 不稳定容易截断二进制包,优先安装到本地磁盘;SLURM 脚本要保证激活环境在 srun 之前。
- 源码编译场景:编译时必须设置BUILD_SHARED_LIBS=ON,编译失败、中途中断都会缺失_C 扩展。
高频踩坑误区
- 尝试 pip install torch._C:torch._C 属于内置扩展,不存在独立 pip 包,这个操作无效。
- 跨机器拷贝 torch 文件夹:不同 CUDA、系统、架构的二进制不通用,大概率丢失或加载失败。
- 混用 conda install torch 和 pip install torch:两套包互相覆盖,扩展文件错乱。
- Windows 下直接解压预编译包,杀毒软件拦截删除了_C.pyd。
- 升级 Python 大版本后,旧 PyTorch 二进制扩展 ABI 不兼容,也会出现同类加载失败。
【相关 FAQ】
问题 1:ModuleNotFoundError: No module named 'torch._C':检查扩展文件与包路径,torch._C 能不能单独 pip 安装?
回答 1:ModuleNotFoundError: No module named 'torch._C':检查扩展文件与包路径,torch._C 是 PyTorch 内部 C 扩展,没有独立 pip 包,不能 pip install torch._C。
问题 2:ModuleNotFoundError: No module named 'torch._C':检查扩展文件与包路径,find 找不到_C.so 代表什么?
回答 2:ModuleNotFoundError: No module named 'torch._C':检查扩展文件与包路径,find 命令找不到_C.so,代表当前 torch 包二进制扩展残缺,需要卸载清理后重装匹配版本的 PyTorch。
问题 3:ModuleNotFoundError: No module named 'torch._C':检查扩展文件与包路径,把别的机器上的 torch 文件夹拷贝过来可以吗?
回答 3:ModuleNotFoundError: No module named 'torch._C':检查扩展文件与包路径,不建议跨机器直接拷贝 torch 目录,CUDA 版本、系统、CPU 架构不一致,二进制扩展不兼容,极易出现该报错。
问题 4:ModuleNotFoundError: No module named 'torch._C':检查扩展文件与包路径,源码编译 PyTorch 遇到这个报错是什么原因?
回答 4:ModuleNotFoundError: No module named 'torch._C':检查扩展文件与包路径,源码编译时如果没有开启 BUILD_SHARED_LIBS=ON,或者编译中途中断,就不会生成_C.so,导入时报错。
【参考资料】
[2024-02](ModuleNotFoundError: No module named 'torch._C')GitHub PyTorch Issue
[2023-11](PyTorch C 扩展编译说明)PyTorch 官方文档
[2024-05](NFS 共享目录安装 PyTorch 二进制损坏排查)Stack Overflow
[2023-09](conda 与 pip torch 冲突排错)PyTorch 论坛
[2024-03](Windows 杀毒删除 torch._C.pyd 案例)CSDN
【免责声明】
本文为 PyTorch 底层扩展导入报错技术排错笔记,不同系统、CUDA、Python 版本、容器环境现象存在差异,源码编译的配置项较多,最终方案以 PyTorch 官方文档为准;本文仅技术问题解读,不构成生产环境稳定性担保。
