Python调用matlab脚本终极解决方案

1. 前言

直接调用本地的matlab引擎时很简单的方案,但是不能打包到其他设备运行,只能在本地自嗨。所以换了这个方案——将matlab脚本打包成python库。

2. 正文

step1:matlab端操作
  • 打开matlab,在命令后输入:

    deploytool
    

    弹出窗口:
    deploytool

  • 选择Library Compiler

    左上角设置为python package, 加入需要处理的matlab脚本
    设置

    matlab会自动检测调用的脚本,并加入files requied for your library to run.

  • 填写包信息,完成后点击右上角的package。
    在这里插入图片描述

  • 等待打包完成
    打包
    打包完成

step2. python端操作
安装刚刚生成的库(以anaconda虚拟环境为例)
  • 进入虚拟环境
    conda activate ek80Python
    
  • 找到生成库的目录,工作目录切换至该目录
    cd F:\DLOU\ek80\package\EK80Example\for_redistribution_files_only
    
  • 安装库
    python setup.py install
    
step3. 在python程序中调用
import EK80Example


ek80 = EK80Example.initialize()
ek80.EK80Example() # 在matlab脚本中,唯一入口函数为:EK80Example

3. 后记

按照以上步骤打包后,如果不能运行。就在cmd窗口中运行一次,查看是因为哪个库没打包成功,把site-packages目录下该库复制到exe目录下就可以了。
另外,这种方式打包的exe文件如果在其他的机器上运行,还需要安装一个MCR(MATLAB Runtime)

另外,此方法对python版本有要求。MATLAB2016B版本可使用python3.5,但不能使用python3.8,其他版本未做测试。

  • 1
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
### 回答1: 可以使用 Python 的 subprocess 模块调用 Matlab 脚本。 首先,确保 Matlab 已经正确安装并配置好环境变量,然后在 Python 中使用以下代码调用 Matlab 脚本: ``` import subprocess matlab_script = 'path/to/matlab/script.m' subprocess.call(['matlab', '-nodisplay', '-nosplash', '-nodesktop', '-r', f"run('{matlab_script}');"]) ``` 上面的代码会启动 Matlab 并执行脚本 `script.m`,但是不会显示 Matlab 的图形界面。如果需要显示图形界面,可以将 `-nodisplay` 和 `-nosplash` 参数删除。 注意,在调用 Matlab 脚本时,需要确保 Python 中的所有变量都已经被正确传递到 Matlab 中。 参考文献: - [subprocess.call()](https://docs.python.org/3/library/subprocess.html#subprocess.call) - [Running a MATLAB Function from Python](https://www.mathworks.com/help/matlab/matlab_external/call-matlab-function-from-python.html) ### 回答2: Python可以通过matlab.engine模块中的MATLAB引擎来调用Matlab脚本。首先,需要确保计算机上已经安装了MatlabMatlab引擎。然后,通过以下步骤调用Matlab脚本: 1. 在Python脚本中导入matlab.engine模块: `import matlab.engine` 2. 创建一个MATLAB引擎对象: `eng = matlab.engine.start_matlab()` 3. 使用引擎对象调用Matlab脚本: `eng.eval('your_script.m')` 其中,'your_script.m'为你要调用Matlab脚本的文件路径。 4. 如果需要传递参数给Matlab脚本,可以使用引擎对象的`run_`方法: `eng.run_your_script(arg1, arg2)` 其中,arg1和arg2是你要传递的参数。 5. 最后,记得在程序结束时关闭MATLAB引擎: `eng.quit()` 需要注意的是,在调用Matlab脚本之前,Python脚本Matlab脚本需要共享相同的工作路径,这样Python才能找到Matlab脚本。如果脚本不在Python的工作路径下,可以使用绝对路径指定脚本的位置。 通过以上步骤,你就可以在Python调用Matlab脚本了。 ### 回答3: 要在Python代码中调用Matlab脚本,可以使用Python的`subprocess`模块来实现。`subprocess`模块允许在Python脚本中启动和控制外部进程,包括Matlab。 首先,需要确保Matlab已经安装在计算机上,并将Matlab的可执行文件路径添加到系统环境变量中。 在Python代码中,可以使用`subprocess.call()`函数来调用Matlab脚本。例如,如果希望调用名为"script.m"的Matlab脚本,可以使用以下代码: ``` import subprocess subprocess.call(["matlab", "-nosplash", "-nodesktop", "-r", "script"]) ``` 其中,`subprocess.call()`函数的第一个参数是一个列表,包含要在命令行中执行的命令和参数。`"matlab"`是Matlab的可执行文件名,`"-nosplash"`和`"-nodesktop"`是Matlab的命令行选项,用于禁用Matlab的启动画面和图形界面,`"-r"`指定要在Matlab中执行的命令。在这个例子中,命令是`"script"`,对应于要执行的Matlab脚本名。 当Python代码执行到这一行时,会启动Matlab并执行指定的脚本。在脚本执行完毕后,控制权会返回到Python代码。 注意,使用`subprocess.call()`函数调用Matlab时,Python代码会暂停并等待Matlab脚本执行完毕。如果希望在调用Matlab脚本的同时继续执行Python代码,可以使用`subprocess.Popen()`函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值