Невозможно импортировать caffe - iPython не находит переменные среды, которые находит «обычный» python

Я использую Anaconda python на Mac под управлением OS X 10.11 El Capitan.

Я пытаюсь использовать pycaffe в iPython, но импортировать его (import caffe) не удается с ошибкой

ImportError: dlopen(/Users/.../Documents/caffe-master/python/caffe/_caffe.so, 2): Library not loaded: @rpath/libcudart.7.5.dylib
  Referenced from: /Users/.../Documents/caffe-master/python/caffe/_caffe.so
  Reason: image not found

Хотя iPython не может импортировать caffe, это работает в «обычном» python.

Python 2.7.10 |Anaconda 2.3.0 (x86_64)| (default, May 28 2015, 17:04:42) 
[GCC 4.2.1 (Apple Inc. build 5577)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://binstar.org
>>> import caffe
>>> caffe.Net
<class 'caffe._caffe.Net'>

Я также должен упомянуть, что я использую CUDA 7.5, и хотя я не вижу, какая у меня версия caffe (скачал zip), это было сделано из основной ветки 17 сентября 2015 года.

Действия, которые я предпринял, чтобы «обычный» python мог импортировать caffe, заключались в том, чтобы добавить следующее в ~/.bash_profile

# added pycaffe path
export PYTHONPATH="/Users/.../Documents/caffe-master/python:$PYTHONPATH"

# needed to import pycaffe in python
export DYLD_FALLBACK_LIBRARY_PATH='/usr/local/cuda/lib:/anaconda/lib:/usr/local/lib:/usr/lib:/opt/intel/lib:/opt/intel/mkl/lib'

iPython считывает PYTHONPATH, установленный в .bash_profile, поскольку он даст ImportError: No module named caffe, если строка export PYTHONPATH=... закомментирована. Но по какой-то причине он не находит DYLD_FALLBACK_LIBRARY_PATH, что делает «обычный» питон.

Любые идеи о том, что может быть не так?


person Skeppet    schedule 22.10.2015    source источник


Ответы (1)


Хорошо, получается, что основная проблема заключалась в том, что из-за новой функции под названием SIP (защита целостности системы) в El Capitan это предотвращает установку DYLD_FALLBACK_LIBRARY_PATH. Это функция, которая должна обеспечить дополнительную защиту от root-атак на Mac OSX.

Чтобы отключить SIP:

  • Перезагрузите компьютер в режиме восстановления, удерживая cmd-R при запуске.
  • Откройте окно терминала (в разделе «Утилиты» в верхнем меню).
  • Введите csrutil disable, чтобы выключить SIP (и csrutil enable, чтобы включить его снова).
  • Перезагрузите компьютер с помощью символа Apple в мануале.

Это решило проблему для меня. Для получения дополнительной информации: Статья MacWorld о SIP, список рассылки пользователей Caffe.

person Skeppet    schedule 23.10.2015