原帖在 Windows 的 Anaconda 环境导入 torch 时,底层 torch._C 扩展没有找到:
ModuleNotFoundError: No module named 'torch._C'
_C 属于 torch 安装,不是单独 pip 包
原题 import torch 在扩展导入处失败,尚未执行用户网络。先定位 Python 搜到的包目录与扩展候选,再区分源码目录遮挡、安装缺件与 DLL 依赖加载。任意拷贝一个 _C.pyd 可能引入 Python ABI、位数和 torch 版本冲突。
不要尝试 pip install torch._C,它是 torch 发行包的一部分。先不导入 torch,用标准库检查搜索位置和扩展文件:
import sys
import importlib.util
from pathlib import Path
print("josh050608")
print("python:", sys.executable, sys.version)
spec = importlib.util.find_spec("torch")
print("torch spec:", spec)
if spec and spec.submodule_search_locations:
for location in spec.submodule_search_locations:
print("extension candidates:", list(Path(location).glob("_C*")))
Windows 通常应有与该 Python ABI、位数匹配的扩展文件,例如对应的 .pyd。若找到的 torch 其实是项目同名目录或源码树,先移出该目录/消除遮挡,再测试;源码中的 Python 文件不代表已编译安装完成。
若确实是 site-packages,但扩展缺失或安装不完整,在该解释器执行 python -m pip show -f torch,核对分发文件列表、Python 位数和包来源。按官方支持组合在独立环境重装验证,不要从另一台机器拷一个任意版本的 _C.pyd。
如果扩展文件存在,却变成 DLL 加载失败,应继续检查它的依赖和 ABI,这与“找不到扩展模块”有所区别。原帖没有给 torch/Python 完整版本与文件清单,无法确认唯一原因。
最后从原项目目录和独立空目录各测试一次 import torch,确认位置一致,再执行 CPU 张量运算。
将扩展文件清单与解释器标签对照
在故障解释器终端运行 python -m pip show -f torch,查看安装记录中是否包含对应扩展。下面标准库片段输出本解释器认可的扩展后缀,可与前文找到的候选文件比较:
import sys
import sysconfig
import struct
import importlib.machinery
print("python:", sys.executable, sys.version)
print("bits:", struct.calcsize("P") * 8)
print("SOABI:", sysconfig.get_config_var("SOABI"))
print("accepted extension suffixes:", importlib.machinery.EXTENSION_SUFFIXES)
文件后缀相符只是必要线索,还需同一 torch 构建与依赖齐全。若包目录里只有源码 .py 而没有已编译扩展,应按官方支持组合安装完整分发,或按对应源码构建流程完成编译。
若从项目目录失败、空目录成功,优先消除同名 torch 目录或源码树的遮挡;若两处都失败,在独立环境验证官方 wheel,保留原环境记录。Windows 下扩展存在但变成“DLL load failed”,继续沿依赖树查,不再按“模块文件根本没有”处理。
最终从原入口和空目录分别确认 torch.file、版本和 CPU 小张量运算。原题缺少精确版本与包清单,文章给出的是证据分支,不能补造一个确定的缺失 DLL 名。
参考:原始求助帖;技术依据:Python 导入机制、PyTorch 官方安装指南、pip 官方用法、Python wheel 平台兼容标签。