Linux 安装Matlab engine R2018a与python3.7不适配问题

Linux 安装Matlab engine R2018a与python3.7不适配问题

我的环境

需要用python调用matlab的.m文件
linux服务器
已安装Matlab 2018a 安装链接
服务器上默认的python版本是3.7的,项目因为一些原因在3.6的虚拟环境上跑不起来,所以只能尝试解决版本问题了(o´・ェ・`o)

具体步骤

相信看到我这一篇的时候,你已经熟练地知道怎么为python安装matlab engine的 (python setup.py install),紧接着bug就出现了,意思大概是matlab2018a只适用于python2.7,3.5,3.6 (没截图,就口头翻译一下啦)
接下来主要是三步解决问题:

  1. 修改setup.py文件中的_supprted_versions ,加上你要的版本,我这里是3.7;

    这个时候如果能直接修改就可以使用上面的命令install了,但是我没有修改权限(保存时会报permission denied的错误)

    解决:拷贝一份setup.py,重命名为set_up.py(其他名字应该也可以,只要是py文件就行),然后放到和setup.py相同的目录下,然后install(python 你拷贝后的文件名 install

安装完后import matlab发现还是会出现版本不适用的问题,就有了下面的步骤

  1. 修改__init__.py文件中的_supported_versions,注意__init__.py你可能看到很多,我们这里要改的位于pythonroot/site_packages/matlab/engine
    文件夹下的__init__.py文件
    (pythonroot本人的是anaconda自带的位于/anaconda3/lib/python3.7)
    ①在_supported_versions中加入你需要的版本


②第二步,也是我自己灵机一动,想出来的关键步骤!!
在这个__init__.py文件中,会调用对应版本的matlab engine,可是没有3.7的(调用时会报no module for matlabengineforpython37这个错误!),但是如果调用3.6的肯定可以,并且3.6和3.7是最接近的。

具体:修改该__init__.py文件的try语句中(注意是try那里的,不是except后的)去掉 +_PYTHONVERSION ,在matlabengineforpython后直接加上3_6(注意是3_6,不是你需要的版本)这样Python就会调用python36的matlab engine,不会再出现上述错误了!
注释掉的是原来的代码

3. 最后,简单介绍一下matlab engine的使用
import matlab
import matlab.engine
eng=matlab.engine.start_matlab()   #这一步有一点耗时
arr=[...]    #arr是一个numpy数组
arr_mat=matlab.double(arr.tolist())  #要转化为matlab兼容的double类型才行
return=eng.f(arr_mat)     # f( )是我们自定义的matlab函数,arr_mat作为参数传入,两个参数我也试过可以传;return是返回值
eng.exit()  #关闭引擎

本文为原创,转载请注明出处!谢谢浏览!

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页