matlab.engine 的导入在 IPython 中有效,但在 Jupyter 中无效
Import of matlab.engine works in IPython but not in Jupyter
我刚刚使用
将 Python 的 MATLAB 引擎 API 安装到我的主目录
$ python setup.py build --build-base=$HOME install --prefix=$HOME
但是,当我尝试从 Jupyter notebook 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.
奇怪的是,当我 import matlab.engine
从 IPython shell 与 Jupyter 笔记本 [=40] 相同的目录中时,我没有收到此错误=].我不仅可以从 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 带来麻烦? (你认为我应该如何摆脱它?)
更新
我将错误跟踪到 matlab.engine
模块的 __init__.py
文件中的以下行:
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)
我不知道这里发生了什么。
IPython Shell 和 Jupyter Notebook 无法访问相同的 C 库的假设似乎是正确的。为什么会这样,我不知道。两者作为同一个包的一部分安装,使用相同版本Python,等等
将以下行添加到我的 .bashrc
shell 配置文件中解决了问题:
export LD_LIBRARY_PATH=XXX
其中 XXX
是包含我希望 Jupyter Notebook 使用的 libstdc++.so.6
版本的目录(并且 IPython Shell 已经使用)。
我刚刚使用
将 Python 的 MATLAB 引擎 API 安装到我的主目录$ python setup.py build --build-base=$HOME install --prefix=$HOME
但是,当我尝试从 Jupyter notebook 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.
奇怪的是,当我 import matlab.engine
从 IPython shell 与 Jupyter 笔记本 [=40] 相同的目录中时,我没有收到此错误=].我不仅可以从 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 带来麻烦? (你认为我应该如何摆脱它?)
更新
我将错误跟踪到 matlab.engine
模块的 __init__.py
文件中的以下行:
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)
我不知道这里发生了什么。
IPython Shell 和 Jupyter Notebook 无法访问相同的 C 库的假设似乎是正确的。为什么会这样,我不知道。两者作为同一个包的一部分安装,使用相同版本Python,等等
将以下行添加到我的 .bashrc
shell 配置文件中解决了问题:
export LD_LIBRARY_PATH=XXX
其中 XXX
是包含我希望 Jupyter Notebook 使用的 libstdc++.so.6
版本的目录(并且 IPython Shell 已经使用)。