我试图让我的机器配备Ubuntu 12.04LTS。 完成安装页面上的所有步骤之后,我成功地训练了LeNet模型,并尝试从这里作为教程使用它。 然后我得到以下错误:
Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named caffe Error in sys.excepthook: Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/apport_python_hook.py", line 66, in apport_excepthook from apport.fileutils import likely_packaged, get_recent_crashes File "/usr/lib/python2.7/dist-packages/apport/__init__.py", line 1, in <module> from apport.report import Report File "/usr/lib/python2.7/dist-packages/apport/report.py", line 18, in <module> import problem_report File "/usr/lib/python2.7/dist-packages/problem_report.py", line 14, in <module> import zlib, base64, time, sys, gzip, struct, os File "/usr/lib/python2.7/gzip.py", line 10, in <module> import io File "${HOME}/path/to/caffe/python/caffe/io.py", line 2, in <module> import skimage.io File "/usr/local/lib/python2.7/dist-packages/skimage/io/__init__.py", line 11, in <module> from ._io import * File "/usr/local/lib/python2.7/dist-packages/skimage/io/_io.py", line 1, in <module> from io import BytesIO ImportError: cannot import name BytesIO Original exception was: Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named caffe
在我完成上述操作之前,我在.bashrc
文件中设置了PYTHONPATH
。 问题是什么? 任何人都可以提供一些提示吗? 我真的很困惑。 运行命令python -c 'import io; print io.__file__'
在目录中python -c 'import io; print io.__file__'
:
Traceback (most recent call last): File "${HOME}/path/to/caffe/python/caffe/io.py", line 2, in <module> import skimage.io File "/usr/local/lib/python2.7/dist-packages/skimage/io/__init__.py", line 11, in <module> from ._io import * File "/usr/local/lib/python2.7/dist-packages/skimage/io/_io.py", line 1, in <module> from io import BytesIO ImportError: cannot import name BytesIO Error in sys.excepthook: Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/apport_python_hook.py", line 66, in apport_excepthook from apport.fileutils import likely_packaged, get_recent_crashes File "/usr/lib/python2.7/dist-packages/apport/__init__.py", line 1, in <module> from apport.report import Report File "/usr/lib/python2.7/dist-packages/apport/report.py", line 18, in <module> import problem_report File "/usr/lib/python2.7/dist-packages/problem_report.py", line 14, in <module> import zlib, base64, time, sys, gzip, struct, os File "/usr/lib/python2.7/gzip.py", line 10, in <module> import io File "${HOME}/path/to/caffe/python/caffe/io.py", line 2, in <module> import skimage.io File "/usr/local/lib/python2.7/dist-packages/skimage/io/__init__.py", line 11, in <module> from ._io import * File "/usr/local/lib/python2.7/dist-packages/skimage/io/_io.py", line 1, in <module> from io import BytesIO ImportError: cannot import name BytesIO Original exception was: Traceback (most recent call last): File "${HOME}/path/to/caffe/python/caffe/io.py", line 2, in <module> import skimage.io File "/usr/local/lib/python2.7/dist-packages/skimage/io/__init__.py", line 11, in <module> from ._io import * File "/usr/local/lib/python2.7/dist-packages/skimage/io/_io.py", line 1, in <module> from io import BytesIO ImportError: cannot import name BytesIO
那么,问题就变成:如何解决名称问题? PS:我也在caffe的仓库插入了一个问题。
您的Python路径中似乎有一个名为io
的软件包或模块,用于屏蔽标准库软件包。 它被导入,而没有一个BytesIO
对象来导入。
尝试运行:
python -c 'import io; print io.__file__'
在相同的位置运行教程,并重命名或移动由该导入命名的文件,假定它不是标准库版本(以lib/python2.7/io.pyc
)。
这可能是你设置你的Python路径到错误的目录。 你应该包括path/to/caffe/python
,而不是path/to/caffe/python/caffe
,也不应该用后者作为你当前的工作目录来运行python。 在这两种情况下, caffe/python/caffe/io.py
而不是标准库版本。
安装说明在这里没有错; 他们明确告诉你使用:
export PYTHONPATH=/path/to/caffe/python:$PYTHONPATH
请注意在该路径末尾缺少/caffe
。
我也遇到了这个问题,在AWS ubuntu 14.04实例上安装caffe,遵循BVLC github repo上的脚本: “Caffe on EC2 Ubuntu 14.04” 。
我按照指示设置了python路径。 正如@Martijn Pieters诊断的那样,问题是caffe正在导入自己的io库,然后导入scikit-image的io库,而后者正在尝试(但是失败)加载标准的python io库(BytesIO位于哪里)。 相反,由于python路径,当scikit-image尝试从模块io中导入BytesIO时,它会循环地返回到caffe的io模块。
我还发现,即使不尝试导入咖啡,但由于设置了我的python路径包括咖啡,这个相同的问题打到我的其他地方。
可能有几种方法来解决这个问题。 但其实质是咖啡的最高一级进口是错误的。 为了验证这一点,我改变了咖啡代码如下:
我将.../caffe/io.py
模块重命名为.../caffe/caffe_io.py
以保证安全(尽管使用正确的命名空间注意,这不是必须的)
我在pycaffe.py
模块的顶部修改了导入: import caffe.io
import caffe.caffe_io
我以同样的方式修改了__init__.py
的import caffe.io
(从import caffe.io
import caffe.caffe_io
)
现在,当你从python导入io时,它不会在caffe中选择io库。 当你导入caffe时,它会导入它的自定义caffe_io库,一切都会好的。 您可能希望通过python caffe模块进行更彻底的扫描,以确保我没有忽略导入需要更改的其他位置。
我希望这有帮助。 也许当我有时间的时候,我会发出一个pull请求,对caffe github回购进行这些(或类似的)更改。