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, эта же проблема поражает меня в другом месте.
вероятно, есть несколько способов решить эту проблему. Но суть в том, что виноват импорт кофе высшего уровня. Чтобы убедиться в этом, я изменил кафе код следующим образом:
я переименовал
.../caffe/io.py
модуль.../caffe/caffe_io.py
чтобы быть в безопасности (хотя при правильном уходе за пространством имен это не должно быть необходимо)Я изменил импорт в верхней части
pycaffe.py
модуль:import caffe.io
toimport caffe.caffe_io
Я изменил импорт в
__init__.py
таким же образом (сimport caffe.io
toimport caffe.caffe_io
)
теперь, когда вы импортируете io из python, он не будет забирать библиотека io в кафе. Когда вы импортируете caffe, он импортирует свою пользовательскую библиотеку caffe_io, и все должно быть хорошо. Вы можете сделать более тщательное сканирование через модули python caffe, чтобы убедиться, что я не пропустил другие места, где импорт должен измениться.
надеюсь, это поможет. Возможно, когда у меня будет время, я отправлю запрос на вытягивание с этими (или подобными) изменениями в репо caffe github.