原帖在 Windows 执行 pip install torch,安装过程进入 tools.nnwrap 导入后失败:
ModuleNotFoundError: No module named 'tools.nnwrap'
这个 tools 不是应该补装的第三方库
原题报错发生在安装脚本导入历史构建工具时,而不是业务代码运行。优先从 pip 日志中查为什么没有选到适合当前 Python/Windows 的 wheel。盲目执行 pip install tools 会引入同名无关包,不能补回 torch 源码树缺失的文件。
这个名字出现在 torch 的历史构建脚本中,不应当成普通运行依赖去安装一个名为 tools 的包。先查 pip 是否因 Python、位数或版本约束找不到 wheel,转而下载了旧源码包。
在安装失败的终端对应的 Python 中运行:
import sys
import platform
import struct
print("josh050608")
print("python:", sys.executable, sys.version)
print("platform:", platform.machine(), struct.calcsize("P") * 8)
然后在同一终端执行:
python -m pip --version
python -m pip debug --verbose
python -m pip config list
检查安装日志实际下载的是 .whl 还是 .tar.gz,以及是否有旧版本固定、镜像源或 32 位 Python 限制。发布日志前遮去私有索引中的凭据。
普通使用应在独立、受官方支持的 64 位 Python 环境选择匹配 wheel。按官方安装选择器选择系统和计算平台,再用该环境的 python -m pip 执行。可以加 --only-binary=:all: 进行诊断,让无匹配 wheel 时明确失败,而不是静默转源码构建。
如果项目确实要求从源码构建,按那个版本的官方源码指南获取完整仓库及子模块,不能靠向环境补一个无关 tools 包修好缺失源码。原帖没给 Python 与下载包版本,无法确认是哪一个旧发布包。
最后检查 python -c "import torch; print(torch.__version__, torch.__file__)" 成功,并记录所用 wheel 与解释器。
用只接受 wheel 的下载检查避免误入源码构建
先记录实际 Python、位数、pip 索引和项目版本约束。下面是诊断命令,应在独立环境的终端执行;它下载到指定目录,不安装,也不编译:
python -m pip download torch --only-binary=:all: --no-deps --dest wheel_probe
若项目固定 torch 版本,给命令补上对应 ==版本号,并采用官方选择器或历史页给出的索引。成功下载只说明找到了一份符合标签的候选,仍需核对 CPU/CUDA 构建与项目依赖;失败则查看 pip 拒绝候选的原因,不要去掉 only-binary 让它悄悄走源码。
| 日志线索 | 优先处理 |
|---|---|
下载 .tar.gz 后进入 setup.py |
查 wheel 缺失原因和旧包约束 |
| Python 为 32 位 | 换官方目标版本支持的架构环境 |
| 索引只提供很老的包 | 核对项目配置与源,保留原始日志 |
| 明确需要源码构建 | 使用对应版本完整源码与子模块、编译器和官方步骤 |
仅 torch 成功下载不代表 torchvision 等伴随包也兼容。完成后在新进程验证 torch 导入、小张量运算,再让 IDE 或应用入口切换到该环境。原帖缺少 Python 和下载包版本,文章不能替它指定一个未经确认的历史 wheel。
参考:原始求助帖;技术依据:PyTorch 官方安装指南、pip 官方用法、Python wheel 平台兼容标签。