2014-12-10 15 views
7

Sto provando a eseguire caffe sulla mia macchina dotata di Ubuntu 12.04LTS. Dopo aver completato tutti i passaggi su Installation page, ho addestrato il modello LeNet con successo e ho provato ad usarlo come tutorial da here. Poi ho ottenuto il seguente errore:ImportError non può importare il nome BytesIO quando import caffe su 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 

ho impostato la PYTHONPATH in .bashrc lima prima di me quanto sopra. Qual è il problema? Qualcuno potrebbe dare qualche suggerimento? Sono davvero confuso. Dopo aver eseguito il comando python -c 'import io; print io.__file__' nella directory molto:

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 

Quindi, il problema diventa a: come risolvere la questione del nome? P.S .: Ho anche inserito un problema a the repository of caffe.

risposta

11

Sembra che si abbia un pacchetto o un modulo denominato io nel percorso Python che sta mascherando il pacchetto della libreria standard. Viene invece importato ma non ha un oggetto BytesIO da importare.

prova ad eseguire:

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

nella stessa posizione si esegue il tutorial e rinominare o spostare un file nominato in che l'importazione, presumendo che non è la versione della libreria standard (che termina in lib/python2.7/io.pyc).

Potrebbe essere impostato il percorso Python nella directory errata. Dovresti includere path/to/caffe/python, non path/to/caffe/python/caffe, né provare a eseguire python con quest'ultimo come directory di lavoro corrente. In entrambi i casi caffe/python/caffe/io.py anziché la versione di libreria standard.

Le istruzioni di installazione non sono in difetto qui; dicono chiaramente di utilizzare:

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

nota la mancanza di /caffe alla fine di quel percorso.

+0

Ciao, @Martijn Pieters, ho eseguito il comando e ottenere l'errore in qualche modo lo stesso del post originale. Ma questa volta, quello che sono sicuro è che il problema è radicato nel file io.py nella directory di caffe, o nel file _io.py di skimage. Tuttavia, non so come risolvere questo problema ... – stoneyang

+0

@stoneyang: stai eseguendo 'caffe/io.py' come script? –

+0

@stoneyang: nel report del bug dici di aver impostato 'PYTHONPATH'; a cosa l'hai impostato? Comprende '$ {HOME}/percorso/a/caffe/python/caffe'? –

2

Mi sono imbattuto in questo problema, installando caffe su un'istanza di ubuntu 14.04 di AWS seguendo lo script come descritto sul repository github BVLC qui: "Caffe on EC2 Ubuntu 14.04".

Ho impostato il percorso Python come indicato. Come diagnosticato da @Martijn Pieters, il problema è che il caffè sta importando la propria libreria io, che sta quindi importando la libreria io di scikit-image, che a sua volta sta provando (ma fallendo) a caricare la libreria io standard python (dove si trova BytesIO). Invece, a causa del percorso Python, quando l'immagine di scikit tenta di importare BytesIO dal modulo io, si riconduce in modo circolare al modulo io di caffe.

Ho anche scoperto che anche quando non si tenta di importare caffe, ma a causa dell'impostazione del mio percorso python per includere caffe, questo stesso problema mi colpisce altrove.

Ci sono probabilmente diversi modi per risolvere questo problema. Ma l'essenza è che l'importazione di alto livello di caffe è in difetto.Per effettuare questa verifica, ho alterato il codice caffe come segue:

  1. Ho rinominato modulo .../caffe/io.py di .../caffe/caffe_io.py essere sicuro (anche se con cura namespace corretto, questo non dovrebbe essere necessario)

  2. ho modificato il importazione nella parte superiore del modulo pycaffe.py da: import caffe.io a import caffe.caffe_io

  3. ho modificato l'importazione in __init__.py stesso modo (da import caffe.io a import caffe.caffe_io)

Ora, quando si importa da Python, non prenderà la libreria io in caffe. Quando importi caffe, importerà la sua libreria caffe_io personalizzata e tutto andrà bene. Si consiglia di eseguire una scansione più approfondita attraverso i moduli python caffe per assicurarsi di non aver trascurato altri luoghi in cui l'importazione deve essere modificata.

Spero che questo aiuti. Forse quando avrò tempo, rilascerò una richiesta di pull con queste (o simili) modifiche al repository github di caffe.

+0

Ha funzionato per me –