You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python(ONNX)无法导入checker模块问题求助

解决Caffe2+ONNX导入错误:ImportError: cannot import name 'checker'

我之前也碰到过类似的环境依赖问题,结合你的环境信息(Ubuntu 16.04、Python 3.6.5、Anaconda 3.4.5.2、仅CPU,conda安装的Caffe2),这个错误大概率是ONNX版本不兼容或者模块安装不完整/路径冲突导致的,给你一步步排查解决的方案:

1. 先排查当前ONNX的安装状态

首先确认你的conda环境里ONNX的版本和安装来源,运行以下命令:

conda list | grep onnx
# 或者用pip检查
pip show onnx

你遇到的ImportError: cannot import name 'checker'ModuleNotFoundError: No module named 'onnx.checker',通常是因为:

  • 安装的ONNX版本太老(比如0.x版本),那时checker模块的结构和现在不同;
  • conda安装的Caffe2自带的ONNX依赖不完整;
  • PYTHONPATH设置导致caffe2自带的onnx子模块覆盖了全局的ONNX模块。

2. 卸载并重新安装兼容的ONNX版本

因为你用的是Python 3.6(比较老的版本),建议安装适配的ONNX稳定版本(比如1.6.0或1.7.0,这两个版本支持Python 3.6):

步骤:

  1. 先卸载现有ONNX:
    # 如果是conda安装的,用这个
    conda remove -y onnx
    # 如果是pip安装的,用这个
    pip uninstall -y onnx
    
  2. 用pip重新安装指定版本(优先用pip,conda源的ONNX版本可能匹配度不好):
    pip install onnx==1.6.0 --no-cache-dir
    
    --no-cache-dir是为了避免之前缓存的不完整安装包导致问题。

3. 调整PYTHONPATH,避免模块冲突

你手动设置的PYTHONPATH指向了caffe2/python目录,这可能会导致caffe2目录下的onnx子模块覆盖环境中全局安装的ONNX模块,进而引发导入错误。

测试方法:

临时取消PYTHONPATH设置,然后测试导入:

unset PYTHONPATH
# 进入Python交互环境
python

在Python里运行:

import onnx.checker
import caffe2.python.onnx.frontend

如果这两个导入都成功,说明就是PYTHONPATH的问题。正常情况下,conda环境中安装的Caffe2不需要手动设置PYTHONPATH,conda会自动处理环境变量,所以建议移除这个手动设置的PYTHONPATH(可以修改~/.bashrc或者环境的activate脚本去掉相关设置)。

4. 验证ONNX安装完整性

安装完成后,检查site-packages里的ONNX目录是否有完整的模块:

ls /home/username/WorkStuff/anaconda3/envs/testcaffe/lib/python3.6/site-packages/onnx/

你应该能看到checker.pydefs.pyhelper.py,以及protobuf生成的GraphProto.pyTensorProto.py等文件。如果缺失这些文件,说明安装不完整,重新执行步骤2的pip安装命令即可。

5. 测试转换脚本

完成以上步骤后,再运行你拿到的转换脚本,应该就能正常导入模块了。

内容的提问来源于stack exchange,提问作者Paulius Pocius

火山引擎 最新活动