python - 在 anaconda 虚拟环境中启动 Matlab 引擎返回 'Segmentation fault (core dumped)'

标签 python matlab python-3.x anaconda matlab-engine

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

顺便说一句,我在 Ubuntu 上

最佳答案

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

  1. $LD_LIBRARY_PATH 应该包含 Anaconda 安装路径。根据 conda 文档,不鼓励添加这样的路径:https://conda.io/docs/building/shared-libraries.html , 但有些包可能无论如何都会这样做,从而导致段错误。
  2. 需要从正确版本的 libpythonXXX.dylib 文件到/usr/lib/的符号链接(symbolic link),以便 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" .此时,您应该能够从 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 的符号链接(symbolic link):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(到目前为止没有注意到不良影响) .

关于python - 在 anaconda 虚拟环境中启动 Matlab 引擎返回 'Segmentation fault (core dumped)',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44823720/

相关文章:

python - python中具有预定义大小的多维数组

python - 让用户输入 3 个名字,在 Python 中按字母顺序排列

matlab - 在同一包的其他方法内调用 matlab 包中的一个方法

python-3.x - ./python : symbol lookup error: ./python: 编译 python 时 undefined symbol : __gcov_indirect_call_profiler

python - 如何列出 dict.items() 中所有可能的 3 个字母组合?

python - Matplotlib:事后更改颜色图

python - 在python中绘制多条线

matlab - 这个旋转矩阵(关于向量的角度)是否仅限于某些方向?

c - Matlab 2013b 生成的代码在 mex 中生成 Undefined symbols for architecture x86_64 错误

python - 无法让我的计数函数在 Python 中运行