matlab支持的python版本_[python][matlab]在python36上安装matlab2015b引擎

问题来源

笔者曾经在python34上安装matlab接口,当时使用的版本为matlab 2015b,众所周知,2015年还没发行py36,所以只能支持到py34。这种不兼容有两种解决办法,你可以通过查看本地的matlab文档进而知道支持的py版本,升级到高版本的matlab可以支持更高版本的py。当然也可以新建旧版本的py,比如笔者就是使用anaconda建立了一个py34的库,相比于升级matlab,降级py是更简单的做法。

相对应的做法可以参考我上一篇博文的做法:

https://www.cnblogs.com/wildkid1024/p/10417183.html

新的问题

但是不是新建库就解决问题了呢,随之而来的新问题是,假如我们其他编程库依赖于更新版本的py版本,那么我们不得不忙于不停地版本切换。最佳的解决方案,是py36兼容matlab 2015b,甚至是其他版本。但是如果切换到python36再运行上述的安装方案时,便会出现错误:

Python 3.6 is not supported.

原来是官方的setup文件里不支持py3.6,那么怎么办呢?

解决方案

通过阅读engine源码文件,我们可以得知,原来受支持的版本在一个列表中,于是,我们需要找到以下文件engines/python/build/lib/matlab/engine/__init__.py,然后修改对应的受支持列表为:

_supported_versions = ['2_7', '3_3', '3_4', '3_6']

同样,通过不断地追踪错误,我们很容易找到另外两个版本支持列表的文件:

engines/python/dist/matlab/engine/__init__.py和 engines/python/setup.py,依次进行同样的修改即可。

当再次运行python setup.py install时,仍然会报错:

ModuleNotFoundError: No module named 'matlabengineforpython3_6'

matlabengineforpython3_6是一个编译好的py二进制库,当然没办法再编译,当然一个解决方法就是修改py34的二进制库即可。需要复制/engines/python/dist/matlab/engine/win64/matlabengineforpython3_4.pyd复制到同文件夹下,然后改为matlabengineforpython3_6.pyd即可。剩下的工作还需要一个二进制代码编辑器,然后将其中的所有3_4修改为3_6即可。在win下,可能还需要一些修改,将python34.dll修改为python36.dll。

当再次运行python setup.py install时,经过一番安装之后,就可以使用以下的程序来验证是否安装成功:

import sys

print(sys.version)

import matlab.engine

eng = matlab.engine.start_matlab()

print(eng.sqrt(4.))

小插曲

当使用linux操作系统的时候,很可能遇到文件读写权限问题,相关的操作可以按照官方给出的文档进行操作:参见[2].

引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值