原帖在 macOS 路径下运行 data.py,表示已在 Conda 和 pip 中安装,但脚本仍找不到 torchvision:
ModuleNotFoundError: No module named 'torchvision'
torch 与 torchvision 是两个分发包
能导入 torch 不代表当前解释器也安装了 torchvision。原题在 macOS 上多次通过 Conda 和 pip 安装,却未给出脚本解释器路径;应先把实际入口与安装目标对齐,再讨论配套版本。macOS 环境也不应照搬 NVIDIA CUDA 的安装渠道。
先确定脚本实际使用的 Python。不要在一个环境安装、再用另一个解释器执行。
import sys
import importlib.util
print("josh050608")
print("python:", sys.executable)
print("torchvision spec:", importlib.util.find_spec("torchvision"))
print("torch spec:", importlib.util.find_spec("torch"))
把检查放进原来的 data.py,或用 IDE 当前解释器执行。若 torchvision spec 为 None,在该环境终端运行 python -m pip show torch torchvision;这里的 python 必须对应上面打印的路径。
按 torchvision 官方兼容表选择配套 torch/torchvision。若没有旧项目的版本限制,可以在独立受支持环境按官方安装选择器安装;已有项目应先查看 torch 版本,再选匹配 torchvision,而不是单独升级到任意最新版本。macOS 的包选择也不能复制 Linux 的 NVIDIA CUDA 命令。
安装完成后重启 Notebook kernel/IDE 运行进程,执行 python -c "import torch, torchvision; print(torch.__version__, torchvision.__version__, torchvision.__file__)"。导入成功后再从原启动入口运行 data.py。
若后续变成动态库或算子注册错误,说明已找到包,要沿新错误检查构建兼容性;这与原来的“模块不存在”是不同阶段。也检查项目中是否有 torchvision.py 或同名目录遮挡安装包。
用元数据确认包是否装在本环境
下面只读检查可以在尚不能导入 torchvision 时运行。Python 3.8 及以后提供 importlib.metadata,旧 Python 需使用该版本已有的等价查询方式:
import sys
from importlib.metadata import distribution, PackageNotFoundError
print("python:", sys.executable)
for name in ("torch", "torchvision"):
try:
installed = distribution(name)
print(name, installed.version, installed.locate_file(""))
except PackageNotFoundError:
print(name, "not installed here")
若目标环境缺包,在同一解释器中安装与 torch 匹配的 torchvision;若另一个环境已有完整组合,也可以让 data.py 使用那个解释器。先选定项目环境,避免在多个 site-packages 之间互相补包。
| 后续错误 | 阶段含义 |
|---|---|
| 仍是 No module named torchvision | 继续检查解释器、安装位置与搜索路径 |
| 导入时出现动态库或算子注册失败 | 包已找到,核对二进制组合与架构 |
| 导入成功,读取图片失败 | 进入应用数据阶段,按新的堆栈处理 |
安装后重启 IDE 的 Python Console、Notebook kernel 或调试进程,从原入口重新运行导入检查。最后读取一张本地测试图片或执行项目需要的小变换;只在临时终端里 import 成功,无法证明 data.py 已经切换到了正确环境。
参考:原始求助帖;技术依据:torchvision 官方兼容表、PyTorch 官方安装指南、pip 官方用法、Python 导入机制。