8

我正在尝试让caffe在配备 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

在执行上述操作之前,我设置了PYTHONPATHin文件。.bashrc问题是什么?谁能给点提示?我真的很困惑。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 的存储库中插入了一个问题。

4

2 回答 2

11

您似乎有一个io在 Python 路径中命名的包或模块,它掩盖了标准库包。它被导入,但没有BytesIO要导入的对象。

尝试运行:

python -c 'import io; print io.__file__'

在您运行教程的同一位置并重命名或移动由该导入命名的文件,假设它不是标准库版本(以 结尾lib/python2.7/io.pyc)。

可能是您将 Python 路径设置为错误的目录。您应该包含path/to/caffe/python, not path/to/caffe/python/caffe,也不应该尝试将 python 用作当前工作目录。在这两种情况下caffe/python/caffe/io.py,而不是标准库版本。

安装说明在这里没有错;他们清楚地告诉你使用:

export PYTHONPATH=/path/to/caffe/python:$PYTHONPATH

/caffe请注意在该路径的末尾缺少。

于 2014-12-10T08:56:52.597 回答
2

我也遇到了这个问题,按照此处 BVLC github repo 中概述的脚本在 AWS ubuntu 14.04 实例上安装 caffe:“Caffe on EC2 Ubuntu 14.04”

我已经按照说明设置了 python 路径。正如@Martijn Pieters 所诊断的那样,问题在于 caffe 正在导入自己的 io 库,然后导入 scikit-image 的 io 库,而后者又尝试(但失败)加载标准 python io 库(BytesIO 所在的位置)。相反,由于 python 路径,当 scikit-image 尝试从模块 io 导入 BytesIO 时,它会循环返回到 caffe 的 io 模块。

我还发现,即使不尝试导入 caffe,但由于将我的 python 路径设置为包含 caffe,同样的问题也会在其他地方遇到。

可能有几种方法可以解决这个问题。但本质是caffe的顶层导入有问题。为了验证这一点,我将 caffe 代码更改如下:

  1. 我将.../caffe/io.py模块重命名.../caffe/caffe_io.py为安全(尽管有正确的命名空间护理,但这不是必需的)

  2. pycaffe.py我将模块顶部的导入从:修改import caffe.ioimport caffe.caffe_io

  3. 我以相同的方式修改了导入__init__.py(从import caffe.ioimport caffe.caffe_io

现在,当你从 python 导入 io 时,它不会在 caffe 中获取 io 库。当你导入 caffe 时,它​​会导入其自定义的 caffe_io 库,一切都应该很好。您可能希望对 python caffe 模块进行更彻底的扫描,以确保我没有忽略导入需要更改的其他地方。

我希望这有帮助。也许当我有时间的时候,我会向 caffe github 存储库发出这些(或类似的)更改的拉取请求。

于 2015-12-09T20:37:44.233 回答