在 anaconda 虚拟环境中启动 Matlab 引擎返回"分段错误(核心转储)"



我已经按照 Anaconda在 Linux 上安装 Matlab Engine 到运行 Python3.5 的 Anaconda 虚拟环境的回答中的说明安装了官方的 MATLAB 引擎。我现在可以导入matlabmatlab.engine而不会收到错误。但是,当我尝试时:matlab.engine.start_matlab(),我得到"分段错误(核心转储)">

我尝试从 conda 环境中设置LD_LIBRARY_PATH(如果这甚至是相关的):export LD_LIBRARY_PATH=/System/Library/Frameworks/Python.framework/Versions/Current/lib:$LD_LIBRARY_PATH,但无济于事。据我所知,该路径也不存在,所以我也尝试了export DYLD_LIBRARY_PATH=path_to_anaconda3/envs/myEnv/lib:$LD_LIBRARY_PATH

那么,如何在 Anaconda 虚拟环境中启动 matlab 引擎/从 Python 调用 Matlab 脚本呢?

顺便说一下,我在 Ubuntu 上

简短回答:有两个问题需要解决

  1. $LD_LIBRARY_PATH不应包含指向 Anaconda 安装的路径。根据 conda 文档:https://conda.io/docs/building/shared-libraries.html,不鼓励添加这样的路径,但某些包可能会这样做,从而导致分段错误。
  2. 需要从正确版本的libpythonXXX.dylib文件到/usr/lib/的符号链接,以便MATLAB可以找到正确的Python

长答案:将 MATLAB 引擎与 Anaconda 配合使用的完整安装说明

  • 安装支持您要使用的 Python 的 MATLAB 版本。确保此特定 MATLAB 安装已激活
  • 打开终端并转到包含 MATLAB 安装的 Python 引擎的文件夹:cd "/usr/local/MATLAB/R2017a/extern/engines/python"
  • 使用要使用的 Python 版本运行 setup.py,并在 Anaconda 环境位置添加前缀:sudo python3.5 setup.py install --prefix="/your_path_to_anaconda3/envs/your_env"。此时,您应该能够从 Anaconda 环境的 Python 中import matlabmatlab.engine,但是,就我而言,启动引擎会导致分段错误。
  • 找到正确版本的 libpython 文件。您的 Anaconda 环境应该包含它:find /your_path_to_anaconda3/envs/your_env/ -name libpython*.在我的情况下,这返回:/
    • .../lib/libpython3.so
    • /
    • .../lib/python3.5/config-3.5m/libpython3.5m.a
    • /
    • .../lib/libpython3.5m.so.1.0
    • /
    • .../lib/libpython3.5m.so
  • 因为我想在python 3.5中使用它,所以我选择了libpython3.5m(我不知道为什么"m"在那里)。创建一个符号链接,从此文件的 .dylib 版本到/usr/lib:sudo ln -s /your_path_to_anaconda3/envs/your_env/lib/libpython3.5m.dylib /usr/lib。请注意,在/usr/lib 中只能有一个名为 libpython3.5m.dylib 的链接。因此,如果您有多个使用相同版本的 Python 的 Anaconda 环境,您只需设置一次此链接即可访问任何一个。但是,请记住不要删除此环境,因为这会断开依赖它的所有其他环境的链接。
  • 启动一个新终端 (!) 并激活您的 Anaconda 环境:source activate your_env.在您的 Anaconda 环境中检查 LD_LIBRARY_PATH 是否包含对 Anaconda 环境echo $LD_LIBRARY_PATH的任何引用。如果是这样,请确保它不再这样做:export LD_LIBRARY_PATH=only_paths_you_do_want_to_keep_separated_by_a_colon。每当您激活 Anaconda 环境时,都需要重复此导出操作,因此您可能需要研究更永久的设置方法。但是,就我而言(除了我一直在自己添加它,希望这会改善事情之外)路径实际上是由 pyggu 添加的,所以我最终从我的 python 脚本中重置了LD_LIBRARY_PATH(到目前为止没有注意到不良影响)。

最新更新