ImportError не может импортировать имя BytesIO при импорте caffe на ubuntu

Я пытаюсь сделать caffe работает на моей машине, оснащенной Ubuntu 12.04 LTS. После завершения всех шагов на установка, я успешно обучил модель 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

я поставил PYTHONPATH на прежде чем я сделал выше. В чем проблема? Может кто-нибудь дать какой-то намек? Я действительно в замешательстве. После запуска команда 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

Итак, проблема становится: как решить вопрос с именем? P. S.: Я также вставить вопрос в хранилище кафе.

2 ответов


у вас есть пакет или модуль с именем io в вашем пути Python, который маскирует стандартный пакет библиотеки. Вместо этого он импортируется, но не имеет 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 в конце этого пути.


Я также столкнулся с этой проблемой, установив caffe на экземпляр AWS ubuntu 14.04, следуя сценарию, описанному в репозитории BVLC GitHub здесь: "кафе на EC2 Ubuntu 14.04".

Я установил путь python, как указано. Как диагностировать @Мартин Питерс, проблема в том, что кафе импортирует свою собственную библиотеку ввода-вывода, которая затем импортировать пакет scikit-изображения Ио библиотека, которая, в свою очередь, пытается (но не), чтобы загрузить стандартную библиотеку Python Ио (где BytesIO размещенный.) Вместо этого, из-за пути python, когда scikit-image пытается импортировать BytesIO из модуля io, он циркулярно ведет обратно к модулю io caffe.

Я также обнаружил, что даже когда не пытаюсь импортировать caffe, но из-за того, что мой путь python включает caffe, эта же проблема поражает меня в другом месте.

вероятно, есть несколько способов решить эту проблему. Но суть в том, что виноват импорт кофе высшего уровня. Чтобы убедиться в этом, я изменил кафе код следующим образом:

  1. я переименовал .../caffe/io.py модуль .../caffe/caffe_io.py чтобы быть в безопасности (хотя при правильном уходе за пространством имен это не должно быть необходимо)

  2. Я изменил импорт в верхней части pycaffe.py модуль: import caffe.io to import caffe.caffe_io

  3. Я изменил импорт в __init__.py таким же образом (с import caffe.io to import caffe.caffe_io)

теперь, когда вы импортируете io из python, он не будет забирать библиотека io в кафе. Когда вы импортируете caffe, он импортирует свою пользовательскую библиотеку caffe_io, и все должно быть хорошо. Вы можете сделать более тщательное сканирование через модули python caffe, чтобы убедиться, что я не пропустил другие места, где импорт должен измениться.

надеюсь, это поможет. Возможно, когда у меня будет время, я отправлю запрос на вытягивание с этими (или подобными) изменениями в репо caffe github.