matlab.engine在Windows和Linux系統上安裝的保姆級教程

最近因爲科研,我需要在python的代碼中調用matlab的腳本/函數,然後需要安裝配置matlab.engine。我用了前後一週的時間分別在Windows和Linux系統上配置好了,而且我在linux系統上(服務器)沒有root權限。所以,踩了非常多的坑,而且許多問題mathwork的官網也沒有解答,所以也許這套解決方法是全網第一,hhhhhh

一、matlab.engine在Windows上的安裝

首先在Windosws上,還是比較容易的。先找到matlab的安裝目錄,在matlabroot\extern\engines\python下找到setup.py。cmd中在上面的路徑下鍵入python setup.py install就可以了。

>cd matlabroot\extern\engines\python
>python setup.py install

在使用的時候用下面的函數就可以愉快的調用matlab函數/腳本了

import matlab.engine
eng = matlab.engine.start_matlab()
eng.matlabfun()##matlabfun表示某個matlab函數

只需要注意,python的版本matlab支持的是有限制的,然後注意事先添加好python的環境變量。

二、matlab.engine在Linux上的安裝

如果小夥伴的linux系統擁有root權限,那麼和windows是上並無差別。**然而!!**有些童鞋是課題組的服務器,或者別的原因沒有root權限,這就非常坑了!因爲你沒辦法在matlab和python的安裝目錄裏新建文件。當然,你可以選擇在自己的用戶目錄下重新安裝matlab和python,然後export path也可以。可是,python還好裝,可是matlab又花錢(破解版又麻煩 )同時還特別大,貌似沒有root權限也提取不了iso,還要從windows提取iso文件再上傳,非常痛苦有沒有!!!
所以,我發現matlab官網提供了非root權限(包括沒有matlab的權限或者沒有python的權限,以及二者都沒有的三種情況)的安裝方式送上鍊接:https://ww2.mathworks.cn/help/matlab/matlab_external/install-matlab-engine-api-for-python-in-nondefault-locations.html非root安裝的matlab官網鏈接

cd "matlabroot\extern\engines\python"
python setup.py build --build-base="builddir" install --prefix="installdir"
##builddir和installdir是你想放在的兩個路徑,自己設置的

然而這裏面還是很多坑,首先這個幫助文檔告訴我們要提前加入你的installdir,然而,其實還不夠。這個路徑下還有很多層文件夾,一定要延申到matlab文件夾的前一級目錄,這個目錄下除了matlab文件夾,還有一個matlabengineforpython-RXXXX-pyX.X.egg-info的文件,這個文件非常重要,等下再提。
到這裏,你就可以愉快的導入matlab.engine了,我這裏用sys.path的方式加入路徑

import sys
sys.path.append("installdir/lib/···/site-position")
import matlab.engine

然而,當你發現此時沒報錯的時候,以爲萬事大吉之時,**還有最大的坑就要來臨!!!**如果此時你運行一下上面的eng = matlab.engine.start_matlab()代碼,會發現下面的錯誤

EngineError: Unable to launch MVM server: License Error when using MATLAB Engine with python
在這裏插入圖片描述
而這個問題在mathworks的社區中沒有一個有效的回答,都是說查看什麼查看matlab版本了,檢查matlab是否正常了,這些廢話,根本不解決問題有木有!!

在這裏插入圖片描述
所以,我研究發現這裏提示的是license error,而我研究了很久發現了這個重要的文件,也就是前面說的matlabengineforpython-RXXXX-pyX.X.egg-info,打開之後是這樣的
在這裏插入圖片描述

Metadata-Version: 1.0
Name: matlabengineforpython
Version: R2018a
Summary: A module to call MATLAB from Python
Home-page: https://www.mathworks.com/
Author: MathWorks
Author-email: UNKNOWN
License: UNKNOWN ##注意這一行
Description: UNKNOWN
Platform: Linux
Platform: Windows
Platform: MacOS

很坑啊有沒有,誰能想到License居然是UNKNOWN!!所以後面纔會license error吧。然後我嘗試在這裏輸入license許可號碼,發現沒用。然後我發現matlab的安裝目錄下有一個licenses的文件夾,把這個文件夾的路徑寫在這裏就好了

Author: MathWorks
Author-email: UNKNOWN
License: /user/···/matlab/licenses ##你自己的matlab目錄
Description: UNKNOWN
Platform: Linux

然後你運行下面的代碼就沒問題了

import matlab.engine
eng = matlab.engine.start_matlab()

祝各位python調用matlab愉快!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章