vscode中的MatLab环境

math @dancristianpaduret

Motivation

以后或许要用到MatLab,先配个环境。习惯了vscode,什么都想看看能不能用vsc来做。

Preparation

  • Licensed MatLab

  • Python

    这里要注意,不同的MatLab版本支持的Python version有所不同。我现在主要是以py310为target,前向兼容一般做到py37。而MatLab R2022b最高只支持py39,最新的支持py37的MatLab版本是R2021b

MatLab in JupyterLab

这里有一篇外文博客,有不详细的地方可以到这里查阅

  1. 创建、激活环境
  2. 安装pip包matlab kernel以及jupyter, jupyterlab, ipykernelpip install matlab_kernel jupyter jupyterlab ipykernel
  3. 安装jupyter内核:python -m matlab_kernel install
  4. 仍然在当前的环境里,安装MatLab Python Engine:
cd ${MATLAB_ROOT}/extern/engines/python    # ${MATLAB_ROOT}是MatLab的安装目录
python setup.py install

检查:jupyter kernelspec list,若能列出 matlab 内核就可以了。

此时您已经可以在此环境的jupyter notebook, jupyterlab中使用 matlab 语法并运行了。

MatLab in vscode

语法检查与高亮:插件Gimly81.matlab。需要配置mlint路径,才能开始语法检查。

上文已经可以在jupyter notebook里运行 MatLab了。众所周知,vsc是支持 jupyter notebook的。不过我们之前的一系列操作都是在特定的环境里面操作的,而 vsc里选择matlab内核时并没有附带在哪个环境运行的选项。下面稍微修改一下之前安装的 jupyter 内核,使得它能够在 vscode 里正常运行。

之前运行python -m matlab_kernel install的时候,输出会打出kernel.json的存储位置,如C:\ProgramData\jupyter\kernels\matlab\kernel.json。打开发现是这样的结构:

{
    "argv": [
        "python",
        "-m",
        "matlab_kernel",
        "-f",
        "{connection_file}"
    ],
    "display_name": "Matlab",
    "language": "matlab",
    "mimetype": "text/x-octave",
    "name": "matlab_connect"
}

可以看到雀实没有指定环境。查阅 jupyter client的文档,发现可以指定内核的环境变量,从而实现指定 python 环境:

"env": {
    "VIRTUAL_ENV": "${KERNEL_VENV}",
    "PATH": "${KERNEL_VENV}\\Scripts;${PATH}"
}

我们可以在配置中加入这样的字段,从而让 vscode 的 jupyter client能够找到运行 matlab_kernel 的环境。${KERNEL_VENV} 是之前的虚拟环境的路径。上述写法用于windows,linux的分隔符是冒号而不是分号,子目录应该也不是Scripts(而是bin?)

改完之后在 vscode 的 jupyter notebook 里就可以启动 MatLab 内核了。

后记

运行可以用测试任务解决,但调试目前还没找到在vsc内部实现的办法。调用 MatLab调试参考如下回答