在 Anaconda 中安装 Matlab 引擎 Python (Linux)

Install Matlab engine in Anaconda Python (Linux)

我正在尝试使用 anaconda python 3.4.

在 CentOS 7 上为 Matlab R2016a 安装 Matlab Engine for Python

我执行了以下命令:

source activate py34 # Default is python 3.5
python setup.py install

输出为:

running install
running build
running build_py
running install_lib
creating /root/.local/lib/python2.7/site-packages/matlab
creating /root/.local/lib/python2.7/site-packages/matlab/_internal
copying build/lib/matlab/_internal/mlarray_sequence.py -> /root/.local/lib/python2.7/site-packages/matlab/_internal
copying build/lib/matlab/_internal/__init__.py -> /root/.local/lib/python2.7/site-packages/matlab/_internal
copying build/lib/matlab/_internal/mlarray_utils.py -> /root/.local/lib/python2.7/site-packages/matlab/_internal
copying build/lib/matlab/mlarray.py -> /root/.local/lib/python2.7/site-packages/matlab
creating /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/engine/engineerror.py -> /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/engine/futureresult.py -> /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/engine/fevalfuture.py -> /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/engine/basefuture.py -> /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/engine/matlabengine.py -> /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/engine/__init__.py -> /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/engine/enginesession.py -> /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/engine/_arch.txt -> /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/engine/matlabfuture.py -> /root/.local/lib/python2.7/site-packages/matlab/engine
copying build/lib/matlab/mlexceptions.py -> /root/.local/lib/python2.7/site-packages/matlab
copying build/lib/matlab/__init__.py -> /root/.local/lib/python2.7/site-packages/matlab
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/_internal/mlarray_sequence.py to mlarray_sequence.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/_internal/__init__.py to __init__.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/_internal/mlarray_utils.py to mlarray_utils.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/mlarray.py to mlarray.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/engine/engineerror.py to engineerror.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/engine/futureresult.py to futureresult.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/engine/fevalfuture.py to fevalfuture.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/engine/basefuture.py to basefuture.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/engine/matlabengine.py to matlabengine.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/engine/__init__.py to __init__.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/engine/enginesession.py to enginesession.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/engine/matlabfuture.py to matlabfuture.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/mlexceptions.py to mlexceptions.pyc
byte-compiling /root/.local/lib/python2.7/site-packages/matlab/__init__.py to __init__.pyc
running install_egg_info
Writing /root/.local/lib/python2.7/site-packages/matlabengineforpython-R2016a-py2.7.egg-info

它以某种方式将 matlab 引擎安装到系统的 python 版本中,而不是 anaconda 的 py34 虚拟环境。我在 OSX 上注意到 ,它确实适用于我的 mac!有人可以在 CentOS 上帮助解决这个问题吗?

折腾了好久终于用简单的方法解决了。除了通过修改 .bash_profile 将系统配置为使用 anaconda 的 python,您还可以添加替代 python 命令:

  sudo update-alternatives --install /usr/bin/python python ~/anaconda3/envs/py34/bin/python 2
  update-alternatives --display python
  cd /usr/local/MATLAB/R2016a/extern/engines/python/
  sudo python setup.py install
cd "matlabroot\extern\engines\python"
python setup.py install --prefix="installdir"

对于 Unix (OSX10) python2.7,使用 Anaconda

cd /Applications/MATLAB_R2015a.app/extern/engines/python
python setup.py install --prefix="/Users/user/anaconda/"

这是 Matlab 文档:

https://www.mathworks.com/help/matlab/matlab_external/install-matlab-engine-api-for-python-in-nondefault-locations.html

提醒那些在anaconda文件夹下有多个虚拟环境的人,做完之后

python setup.py install --prefix="/Users/user/anaconda/"

根据@Leighton的提示,Matlab引擎包其实安装在单独的

anaconda3/lib/python2.7/site-package/matlab 

文件夹而不是普通文件夹

anaconda3/lib/python3.7/site-package. 

因此您需要手动将该 Matlab 文件夹移动到您的 python 正在使用的 site-package 文件夹。

如果您有多个虚拟环境,请将其移动到您将 运行 程序的虚拟环境的相应 site-package 文件夹中。

在这里,我在 Windows 10、MATLAB R2021a 和 Pycharm.

上使用 wsl ubuntu 20.04
  1. 创建 conda 环境

  1. 在MATLAB命令中输入matlabroot获取matlab安装文件夹Window。
`ans =

    /usr/local/MATLAB/R2021a`

现在,所有输入都将输入 linux shell。

  1. 将目录更改为 matlabroot
(base) disusr@disusr:~$ cd /usr/local/MATLAB/R2021a
  1. 通过conda env list检查所有可用的conda env。

    (基础)rpb@rpb:/usr/local/MATLAB/R2021a/extern/engines/python$ conda 环境列表

base                  *  /home/disusr/anaconda3

ext_env     /home/disusr/anaconda3/envs/ext_env
  • 注意括号中的底座。这表明 base conda 环境当前已激活。
  1. 通过键入
  2. 激活 ext_env
conda activate ext_env

您会在终端中注意到,它现在看起来

(ext_env) disusr@disusr:/usr/local/MATLAB/R2021a/extern/engines/python$

  1. 接下来,键入
  2. 安装 MATLAB 引擎

sudo python setup.py install --prefix="/home/disusr/anaconda3/envs/ext_env/"

  • 注意用双引号括起 conda 目录的完整目录名称。双引号应该在那里。

  • conda info 应该给出 conda 的完整路径 env.

  1. 感谢@talentcat 关于移动 的需要。

在文件管理器中,导航到文件夹

/home/disusr/anaconda3/envs/ext_env/lib/python2.7/site-packages/

并剪切文件夹 MATLAB,

然后导航到文件夹

/home/disusr/anaconda3/envs/ext_env/lib/python3.8/site-packages/

并粘贴文件夹 MATLAB

  1. 然后,在 shell
  2. 中输入 matlab 打开 MATLAB gui

(ext_env) disusr@disusr:/usr/local/MATLAB/R2021a/extern/engines/python$ matlab

  1. 在 MATLAB Command Window 中,输入 pyversion(),应该打印

pyversion()

   version: '3.8'
executable: '/home/disusr/anaconda3/envs/ext_env/bin/python'
   library: '/home/disusr/anaconda3/envs/ext_env/lib/libpython3.8.so'
      home: '/home/disusr/anaconda3/envs/ext_env'
  isloaded: 0
  1. 潜在问题
  • 如果输出如下
   version: ''
executable: ''
   library: ''
      home: ''
  isloaded: 0

a) 重新启动 MATLAB b) 确保打开MATLAB时,安装MATLAB引擎的conda环境已经激活。参考步骤(5)。或者,检查 How to permanently activate the conda environment.

部分

*** 我没试过用symbolic links打开MATLAB会不会连接MATLAB-ENGINE。如果您成功执行此操作,请发表评论。

奖金:

如何永久激活conda环境

在终端中,输入

nano .bashrc

然后添加以下行

export PATH=”/home/disusr/anaconda3/bin":$PATH"

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/disusr/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/nu>
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/home/disusr/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/home/disusr/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/home/disusr/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<
source activate ext_env

保存追加的字符串

ctl + x

Y