多语言展示
当前在线:1945今日阅读:19今日分享:20

Jupyter Notebook(Python3.7)如何支持MATLAB?

本经验介绍在Python3.7 Jupyter Notebook的使用当中,支持MATLAB语言遇到的若干问题的解决办法。包括matlab_kernel的安装,matlab有关python库的3.7兼容性问题(async问题)解决。
工具/原料
1

MATLAB

2

Jupyter Notebook

方法/步骤
1

首先,要确保系统中安装有matlab。如图使用CentOS系统,输入matlab -nodesktop -nodisplay,然后可以进入matlab程序,说明matlab安装正常。

2

如果将要运行的jupyter notebook部署在虚拟环境(virtualenv),那么首先要进入虚拟环境。要找到自己创建的virtualenv的位置。如果不是在虚拟环境,跳过此步骤。

3

在jupyter将会运行的环境当中,使用pip3 install matlab_kernel(python2和3并存时,用pip3运行对应pip),安装matlab_kernel。matlab_kernel基于metakernel,是的对matlab的python调用模块的包装,对外表现为jupyter可调用的形式。

4

接下来,要安装MATLAB Engine API for Python。这个是每一版本Matlab自带的Python调用模块,安装文件就在Matalab安装目录下。可以去官网查看有关信息。

5

下面说安装MATLAB Engine API for Python的办法。默认安装包安装在:local/MATLAB版本号/extern/engines在这下面可以看到java文件夹和python文件夹。进入python文件夹。

6

如果直接使用python3 setup.py install,可能会看到3.7版本不支持(R2017b)。对于这一问题,打开setup.py,添加_supported_versions如图。

7

注意,这个模块也要在jupyter运行环境安装。安装完毕后,打开__init__.py,同样添加版本号支持。注意添加 '3_7'

8

接着,在__init__.py的下边,找到如图位置,修改代码:如果_PYTHONVERSION是'3_7',那么引入3.6的库。其它不变。

9

以上就是MATLAB Engine API for Python的处理。接下来,matlab_kernel模块也要做一些处理以使得python 3.7能兼容适配3.6的engine。打开matlab_kernel的有关文件,打开kernel.py。原本的传参async=True无法运行,因为async在python3.7是关键字。做法是改用字典传参。如图红色圈出。

10

下面就大功告成了,启动jupyter notebook,新建matlab笔记本,输入运行。

注意事项

在修改async=True那里,后边如果随便加一行print语句,输出一些东西,可以消除一个会导致matlab内核重启的线程bug,偶然发现,莫名其妙,却很管用。

推荐信息