python安装matlab库_[python][matlab]在python36上安装matlab2015b引擎
問題來源
筆者曾經(jīng)在python34上安裝matlab接口,當(dāng)時(shí)使用的版本為matlab 2015b,眾所周知,2015年還沒發(fā)行py36,所以只能支持到py34。這種不兼容有兩種解決辦法,你可以通過查看本地的matlab文檔進(jìn)而知道支持的py版本,升級(jí)到高版本的matlab可以支持更高版本的py。當(dāng)然也可以新建舊版本的py,比如筆者就是使用anaconda建立了一個(gè)py34的庫(kù),相比于升級(jí)matlab,降級(jí)py是更簡(jiǎn)單的做法。 相對(duì)應(yīng)的做法可以參考我上一篇博文的做法: https://www.cnblogs.com/wildkid1024/p/10417183.html
新的問題
但是不是新建庫(kù)就解決問題了呢,隨之而來的新問題是,假如我們其他編程庫(kù)依賴于更新版本的py版本,那么我們不得不忙于不停地版本切換。最佳的解決方案,是py36兼容matlab 2015b,甚至是其他版本。但是如果切換到python36再運(yùn)行上述的安裝方案時(shí),便會(huì)出現(xiàn)錯(cuò)誤:
Python 3.6 is not supported.
原來是官方的setup文件里不支持py3.6,那么怎么辦呢?
解決方案
通過閱讀engine源碼文件,我們可以得知,原來受支持的版本在一個(gè)列表中,于是,我們需要找到以下文件engines/python/build/lib/matlab/engine/__init__.py,然后修改對(duì)應(yīng)的受支持列表為:
_supported_versions = ['2_7', '3_3', '3_4', '3_6']
同樣,通過不斷地追蹤錯(cuò)誤,我們很容易找到另外兩個(gè)版本支持列表的文件: engines/python/dist/matlab/engine/__init__.py和 engines/python/setup.py,依次進(jìn)行同樣的修改即可。
當(dāng)再次運(yùn)行python setup.py install時(shí),仍然會(huì)報(bào)錯(cuò):
ModuleNotFoundError: No module named 'matlabengineforpython3_6'
matlabengineforpython3_6是一個(gè)編譯好的py二進(jìn)制庫(kù),當(dāng)然沒辦法再編譯,當(dāng)然一個(gè)解決方法就是修改py34的二進(jìn)制庫(kù)即可。需要復(fù)制/engines/python/dist/matlab/engine/win64/matlabengineforpython3_4.pyd復(fù)制到同文件夾下,然后改為matlabengineforpython3_6.pyd即可。剩下的工作還需要一個(gè)二進(jìn)制代碼編輯器,然后將其中的所有3_4修改為3_6即可。在win下,可能還需要一些修改,將python34.dll修改為python36.dll。
當(dāng)再次運(yùn)行python setup.py install時(shí),經(jīng)過一番安裝之后,就可以使用以下的程序來驗(yàn)證是否安裝成功:
import sys
print(sys.version)
import matlab.engine
eng = matlab.engine.start_matlab()
print(eng.sqrt(4.))
小插曲
當(dāng)使用linux操作系統(tǒng)的時(shí)候,很可能遇到文件讀寫權(quán)限問題,相關(guān)的操作可以按照官方給出的文檔進(jìn)行操作:參見[2].
引用
總結(jié)
以上是生活随笔為你收集整理的python安装matlab库_[python][matlab]在python36上安装matlab2015b引擎的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 省选+NOI
- 下一篇: P1035 [NOIP2002 普及组]