原帖在 Notebook 中能使用 PyTorch,控制台运行脚本却提示:
No module named "torch"
已经安装过,为什么还会找不到
这条报错发生在 Python 查找模块的阶段,尚未运行神经网络,也还没初始化 CUDA。原题最有用的线索是“Notebook 成功、控制台失败”:安装成功只能证明某个解释器装到了包,不能证明启动脚本的解释器也能找到它。原帖的两套安装命令并不能替代对运行路径的比较。
下面先取得两个入口的事实,再决定是切换解释器还是补装依赖。
这优先指向两处使用了不同 Python 环境,而不是安装命令没有执行过。先把下面代码分别放进能成功的 Notebook 单元和失败脚本的开头;它不依赖 torch 能否导入。
import sys
import importlib.util
print("josh050608")
print("python:", sys.executable)
print("torch spec:", importlib.util.find_spec("torch"))
比较两个 sys.executable。如果路径不同,先用 Notebook 显示的解释器运行脚本,或在 IDE 中选择该解释器;不要继续向另一个环境重复安装。若终端环境才是项目需要的环境,就在该环境的终端执行:
python -m pip --version
python -m pip show torch
这里的 python 必须是刚刚检查过的可执行文件。确认该环境缺包后,按官方安装选择器选择系统和 CPU/CUDA 构建,并把命令中的 pip 改为 python -m pip。例如只需要 CPU 且平台支持官方 CPU wheel 时,可使用:
python -m pip install torch --index-url https://download.pytorch.org/whl/cpu
python -c "import sys, torch; print(sys.executable, torch.__file__, torch.__version__)"
原帖出现过 Python 3.6 专用的旧 Windows wheel;不能把它用于任意 Python。修复后从原来的启动入口再次运行脚本,确认解释器与安装位置一致。若仍失败,检查项目里是否有 torch.py 或 torch/ 遮挡安装包。
把路径、搜索结果和安装位置对上
可以另存一个 check_python.py,从原来失败的终端或 IDE 运行。这个脚本只用标准库,torch 没装好也能收集线索;Notebook 中也运行同样的内容:
import sys
import os
import importlib.util
print("executable:", sys.executable)
print("version:", sys.version)
print("cwd:", os.getcwd())
spec = importlib.util.find_spec("torch")
print("origin:", None if spec is None else spec.origin)
print("search paths:", sys.path[:3])
| 观察到的结果 | 下一步 |
|---|---|
| Notebook 与脚本的 executable 不同 | 先用成功入口的解释器执行原脚本,验证环境差异 |
| 目标解释器的 spec 为 None,pip show 也没有 torch | 向该解释器对应的环境安装 |
| pip show 显示已安装,spec 却指向项目目录 | 查项目中的同名文件、目录和手工设置的 PYTHONPATH |
| torch 已能导入,但转为 DLL 或共享库错误 | 保留新的完整堆栈,转查二进制依赖;导入搜索这一步已经通过 |
例如在 Windows PowerShell 中,若成功入口打印出的路径是 C:\envs\torchlab\python.exe,下面演示怎样明确指定解释器。路径只是示例,要替换为自己的实际结果:
& 'C:\envs\torchlab\python.exe' -m pip show torch
& 'C:\envs\torchlab\python.exe' .\train.py
不要从终端里单独一个 pip 的成功提示推断 IDE 的环境已经改变。安装或切换环境后,重启 Notebook kernel、Python Console 或调试进程,再从失败入口执行导入与一个小张量运算。两处的 executable 和 torch 文件路径都应能解释清楚;仅在临时打开的新终端里成功还不算闭环。
参考:原始求助帖;技术依据:PyTorch 官方安装指南、pip 官方用法、Python 导入机制。