在Anaconda虚拟环境中启动Matlab引擎会返回“分段错误(核心已转储)”

发布于 2021-01-29 14:59:39

我已经按照从Anaconda在Linux上将Matlab
Engine安装
到运行Python3.5的Anaconda虚拟环境的答案中的说明安装了官方的MATLAB Engine
。我现在可以导入matlab并且matlab.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虚拟环境中从Python启动matlab引擎/调用Matlab脚本?

顺便说一下,我在Ubuntu上

关注者
0
被浏览
64
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

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

    长答案:将MATLAB Engine与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"。此时,你应该能够import matlabmatlab.engine您的蟒蛇环境的Python内,但是,在我的情况下,启动发动机给了分割错误。
    • 查找正确版本的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环境时,都需要重复执行此导出操作,因此您可能希望研究更永久的设置方法。但是,在我的情况下(除了我自己添加它以希望可以改善的事实),该路径实际上是由pygpu添加的,所以我最终从我的python脚本中重置了LD_LIBRARY_PATH(到目前为止,没有注意到不良影响) 。


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看