2014-12-10 13 views
7

Я пытаюсь сделать caffe, работающий на моей машине, оборудованной Ubuntu 12.04LTS. Закончив все шаги на Installation page, я успешно подготовил модель LeNet и попытался использовать ее в качестве учебника от here. Тогда я получил следующее сообщение об ошибке:ImportError не может импортировать имя BytesIO при импорте caffe на ubuntu

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 в .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 

Таким образом, проблема становится: как решить проблему имен? P.S .: Я также вставил вопрос в the repository of caffe.

ответ

11

У вас есть пакет или модуль с именем io в вашем пути Python, который маскирует стандартный пакет библиотеки. Он импортируется вместо этого, но не имеет объекта BytesIO для импорта.

Try работает:

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 в конце этого пути.

+0

Привет, @Martijn Pieters, я запустил команду и получил ошибку в точности так же, как и исходное сообщение. Но на этот раз я уверен, что проблема связана с файлом io.py в каталоге caffe или с файлом _io.py skimage. Тем не менее, я не знаю, как это исправить .... – stoneyang

+0

@stoneyang: вы используете скрипт 'caffe/io.py'? –

+0

@stoneyang: вы сообщаете в своем отчете об ошибке, что вы устанавливаете 'PYTHONPATH'; к чему вы это настроили? Включает ли это '$ {HOME}/path/to/caffe/python/caffe'? –

2

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

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

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

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

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

  2. Я модифицировал импорта в верхней части модуля pycaffe.py от: import caffe.io к import caffe.caffe_io

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

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

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

+0

Это сработало для меня –

 Смежные вопросы

  • Нет связанных вопросов^_^