web-dev-qa-db-fra.com

ImportError: le module dynamique ne définit pas la fonction d'exportation du module (PyInit__caffe)

J'installe caffe avec python3, mais lors de l'importation de caffe, des erreurs se produisent Traceback (l'appel le plus récent en dernier):

 File "classify.py", line 14, in <module>
    import caffe
  File "/home/hez/caffe-master/python/caffe/__init__.py", line 1, in <module>
    from .pycaffe import Net, SGDSolver
  File "/home/hez/caffe-master/python/caffe/pycaffe.py", line 13, in <module>
    from ._caffe import Net, SGDSolver
ImportError: dynamic module does not define module export function (PyInit__caffe)

Mais cela fonctionne bien en python2.7.

J'avais add/path/to/caffe/distrubute/python au PATH, mais quand je fabrique du pycaffe, cela montre que

make: Nothing to be done for `pycaffe'.

Comment puis-je résoudre ce problème? Merci beaucoup.

6
Philokey

Mise à jour
Caffe supporte python 3.3+. Veuillez consulter le guide d’installation et Prérequis .

Réponse originale (obsolète)
L’utilisation de caffe avec Python 3 n’est actuellement pas prise en charge:

L’interface Python de Caffe fonctionne avec Python 2.7. Python 3 ou antérieur Les pythons sont votre propre aventure.

Voir tutoriel d'installation de caffe .

5
Shai

Il est maintenant possible de construire Caffe pour Python3, et je suis presque sûr que c'était possible le 16 décembre lorsque la question a été posée.

Pour ce faire, vous devez supprimer les commentaires dans le fichier Makefile.config avec Python3:

# Uncomment to use Python 3 (default is Python 2)
# Check that boost library name is correct here!!!
PYTHON_LIBRARIES := boost_python3 python3.5m
PYTHON_INCLUDE := /usr/include/python3.5m \
                 /usr/lib/python3.5/dist-packages/numpy/core/include

Mais par conséquent, vous aurez caffe uniquement dans python3 OR python2, en raison de la façon dont caffe s’installe (avec PYTHON_PATH, ce n’est pas vraiment un bon moyen).

Pour contourner cela, vous pouvez faire une telle astuce dans votre ~/.bashrc:

alias python2="export PYTHONPATH=$PYTHONPATH:/home/undead/reps/caffe_py2/python && python2"
alias python3="export PYTHONPATH=$PYTHONPATH:/home/undead/reps/caffe_py3/python && python3"
alias python="export PYTHONPATH=$PYTHONPATH:/home/undead/reps/caffe_py2/python && python2"

Par conséquent, les deux vont fonctionner.

2
UndeadDragon

assurez-vous que vous utilisez la version RIGHT python.

import platform
print(platform.python_version())

J'ai rencontré le problème dans Python3, et cela a fonctionné correctement avec Python2.

0
FantasyJXF