MATLAB
Jupyter Notebook
首先,要确保系统中安装有matlab。如图使用CentOS系统,输入matlab -nodesktop -nodisplay,然后可以进入matlab程序,说明matlab安装正常。
如果将要运行的jupyter notebook部署在虚拟环境(virtualenv),那么首先要进入虚拟环境。要找到自己创建的virtualenv的位置。如果不是在虚拟环境,跳过此步骤。
在jupyter将会运行的环境当中,使用pip3 install matlab_kernel(python2和3并存时,用pip3运行对应pip),安装matlab_kernel。matlab_kernel基于metakernel,是的对matlab的python调用模块的包装,对外表现为jupyter可调用的形式。
接下来,要安装MATLAB Engine API for Python。这个是每一版本Matlab自带的Python调用模块,安装文件就在Matalab安装目录下。可以去官网查看有关信息。
下面说安装MATLAB Engine API for Python的办法。默认安装包安装在:local/MATLAB版本号/extern/engines在这下面可以看到java文件夹和python文件夹。进入python文件夹。
如果直接使用python3 setup.py install,可能会看到3.7版本不支持(R2017b)。对于这一问题,打开setup.py,添加_supported_versions如图。
注意,这个模块也要在jupyter运行环境安装。安装完毕后,打开__init__.py,同样添加版本号支持。注意添加 '3_7'
接着,在__init__.py的下边,找到如图位置,修改代码:如果_PYTHONVERSION是'3_7',那么引入3.6的库。其它不变。
以上就是MATLAB Engine API for Python的处理。接下来,matlab_kernel模块也要做一些处理以使得python 3.7能兼容适配3.6的engine。打开matlab_kernel的有关文件,打开kernel.py。原本的传参async=True无法运行,因为async在python3.7是关键字。做法是改用字典传参。如图红色圈出。
下面就大功告成了,启动jupyter notebook,新建matlab笔记本,输入运行。
在修改async=True那里,后边如果随便加一行print语句,输出一些东西,可以消除一个会导致matlab内核重启的线程bug,偶然发现,莫名其妙,却很管用。