Я только что установил 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)
Я понятия не имею, что здесь происходит.
вид, как будто я теряю сознание сейчас: 'importlib.import_module (" matlabengineforpython2_7 ")' теперь вызывает ошибку (с другим сообщением) в оболочке, но 'import matlab.engine' по-прежнему работает в оболочка. – dbliss
^ah, объяснение приведенного выше несоответствия заключается в том, что команда 'importlib.import_module' работает в оболочке только в том случае, если ранее был выполнен импорт import matlab.engine'. – dbliss
^или путь к '' matlabengineforpython2_7 "' иначе был добавлен в 'sys.path'. моя лучшая догадка о причине общей проблемы заключается в том, что по какой-то причине оболочка ipython и ноутбук не имеют доступа к тем же библиотекам C. Однако я не знаю, как это проверить или изменить. – dbliss