2016-03-18 4 views
0

Я только что установил MATLAB Engine API для Python в моей домашней директории, используяИмпорт matlab.engine работает в IPython, но не в Jupyter

$ python setup.py build --build-base=$HOME install --prefix=$HOME 

Однако, когда я пытаюсь import matlab.engine из блокнота Jupyter, я получаю следующее сообщение об ошибке:

--------------------------------------------------------------------------- 
EnvironmentError       Traceback (most recent call last) 
<ipython-input-2-833daa01cd46> in <module>() 
     8 import numpy as np 
     9 import matplotlib.pyplot as plt 
---> 10 import matlab.engine 
    11 
    12 from dopa_net.behavioral_experiments.analysis_code import behavior_analysis as ba 

/home/despo/dbliss/lib/matlab/engine/__init__.py in <module>() 
    57   pythonengine = importlib.import_module("matlabengineforpython"+_PYTHONVERSION) 
    58  except: 
---> 59   raise EnvironmentError('The installation of MATLAB Engine for Python is ' 
    60         'corrupted. Please reinstall it or contact ' 
    61         'MathWorks Technical Support for assistance.') 

EnvironmentError: The installation of MATLAB Engine for Python is corrupted. Please reinstall it or contact MathWorks Technical Support for assistance. 

как ни странно, я не получаю эту ошибку, когда я import matlab.engine изнутри IPython оболочки в том же каталоге, что и ноутбук Jupyter. Не только я могу импортировать двигатель из оболочки - она ​​работает в оболочке, которая показывает мне, что ничего не повреждено:

In [1]: import matlab.engine 

In [2]: eng = matlab.engine.start_matlab() 

In [3]: tf = eng.isprime(37) 

In [4]: print tf 
True 

Любые идеи, что происходит?

N.B. Я установил версию движка в мой домашний каталог ранее сегодня, но я попытался (и подумал, что сделал) удалить его. Я предполагаю, что часть его осталась позади и вызывает проблемы. Но почему это вызывает проблемы только для Jupyter, а не для оболочки IPython? (А как бы вы догадаться, я должен избавиться от него?)

Update

Я отследил ошибку в следующей строке в файле __init__.py для matlab.engine модуля:

importlib.import_module("matlabengineforpython2_7") 

, который не делает вызовет ошибку в IPython оболочки, но поднять следующее сообщение об ошибке в Jupyter:

--------------------------------------------------------------------------- 
ImportError        Traceback (most recent call last) 
<ipython-input-4-831d184262c4> in <module>() 
----> 1 importlib.import_module("matlabengineforpython2_7") 

/usr/local/anaconda-2.4.0/lib/python2.7/importlib/__init__.pyc in import_module(name, package) 
    35    level += 1 
    36   name = _resolve_name(name[level:], package, level) 
---> 37  __import__(name) 
    38  return sys.modules[name] 

ImportError: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /srv/local/matlab-2015a/extern/engines/python/dist/matlab/engine/glnxa64/../../../../../../../bin/glnxa64/libmwfl.so) 

Я понятия не имею, что здесь происходит.

+0

вид, как будто я теряю сознание сейчас: 'importlib.import_module (" matlabengineforpython2_7 ")' теперь вызывает ошибку (с другим сообщением) в оболочке, но 'import matlab.engine' по-прежнему работает в оболочка. – dbliss

+0

^ah, объяснение приведенного выше несоответствия заключается в том, что команда 'importlib.import_module' работает в оболочке только в том случае, если ранее был выполнен импорт import matlab.engine'. – dbliss

+0

^или путь к '' matlabengineforpython2_7 "' иначе был добавлен в 'sys.path'. моя лучшая догадка о причине общей проблемы заключается в том, что по какой-то причине оболочка ipython и ноутбук не имеют доступа к тем же библиотекам C. Однако я не знаю, как это проверить или изменить. – dbliss

ответ

-1

Гипотеза о том, что оболочка IPython и Jupyter Notebook не имеют доступа к тем же библиотекам C, кажется, были правильными. Почему это так, я понятия не имею. Два были установлены в рамках одного и того же пакета, используйте ту же версию Python и т.д.

Добавление следующей строки в мой файл конфигурации .bashrc оболочки исправили проблему:

export LD_LIBRARY_PATH=XXX 

где XXX является каталог содержащий версию libstdc++.so.6 Я хочу использовать Jupyter Notebook (и что уже используется оболочка IPython).

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