zoukankan      html  css  js  c++  java
  • [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__.pyengines/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].

    引用

    [1]. https://gist.github.com/dangom/303879ca649f7a3fe113912d7ffa62d4

    [2]. https://ww2.mathworks.cn/help/matlab/matlab_external/install-matlab-engine-api-for-python-in-nondefault-locations.html

    [3]. https://www.cnblogs.com/wildkid1024/p/10417183.html

  • 相关阅读:
    SGU 271 Book Pile (双端队列)
    POJ 3110 Jenny's First Exam (贪心)
    HDU 4310 Hero (贪心)
    ZOJ 2132 The Most Frequent Number (贪心)
    POJ 3388 Japanese Puzzle (二分)
    UVaLive 4628 Jack's socks (贪心)
    POJ 2433 Landscaping (贪心)
    CodeForces 946D Timetable (DP)
    Android Studio教程从入门到精通
    Android Tips – 填坑手册
  • 原文地址:https://www.cnblogs.com/wildkid1024/p/11099718.html
Copyright © 2011-2022 走看看