matlab.engine的导入在IPython中工作,但在Jupyter中不起作用

时间:2016-03-18 04:52:22

标签: python matlab ipython jupyter jupyter-notebook

我刚刚使用

将Python的MATLAB Engine API安装到我的主目录
$ python setup.py build --build-base=$HOME install --prefix=$HOME

然而,当我尝试从Jupyter笔记本中import matlab.engine时,我收到以下错误:

---------------------------------------------------------------------------
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.

奇怪的是,当我从{Jupyter笔记本所在目录中的IPython shell import matlab.engine时,我没有收到此错误。我不仅可以从shell导入引擎 - 它在shell中工作,这向我展示没有任何损坏:

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 shell造成麻烦? (你怎么想我应该摆脱它?)

更新

我将错误跟踪到__init__.py模块的matlab.engine文件中的以下行:

importlib.import_module("matlabengineforpython2_7")

它不会在IPython shell中引发错误,但会在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)

我不知道这里发生了什么。

1 个答案:

答案 0 :(得分:-1)

IPython Shell和Jupyter Notebook无法访问相同C库的假设似乎是正确的。为什么会这样,我不知道。这两个是作为同一个软件包的一部分安装的,使用相同版本的Python等。

将以下行添加到我的.bashrc shell配置文件中修复了问题:

export LD_LIBRARY_PATH=XXX

其中XXX是包含libstdc++.so.6版本的目录我希望Jupyter Notebook使用(而且IPython Shell已经使用过)。