小编典典

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

python

我已经按照从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上


阅读 300

收藏
2021-01-20

共1个答案

小编典典

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

  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(到目前为止,没有注意到不良影响) 。
2021-01-20