1. 联合计算环境搭建
MATLAB 与 Python 的联合计算,本质上不是把两个软件"装在同一台电脑上"就结束了,而是要让两个运行时能够互相找到、互相调用、互相传递数据。这一节我们围绕三个关键环节展开:安装与版本选择、版本兼容性检查、环境变量与基础调用测试。只有这三步都验证通过,后续的引擎调用、数据交换和混合项目开发才有可靠基础。
一、先明确调用方向,再决定装什么
联合计算存在两个方向:一是在 Python 中调用 MATLAB,使用 matlab.engine;二是在 MATLAB 中调用 Python,使用 py. 前缀接口。两个方向对安装的要求并不相同。前者需要安装 MATLAB 官方提供的 MATLAB Engine API for Python,后者依赖 MATLAB 内置的 Python 支持,只需让 MATLAB 找到正确的 Python 解释器即可。
因此,安装前应先确定主控端。如果项目以 Python 为主、MATLAB 负责数值计算或 Simulink 仿真,那么重点是 Python 端引擎包的安装;如果以 MATLAB 为主、Python 负责机器学习或数据处理,那么重点是 MATLAB 端的 Python 解释器配置。两种方向可以同时存在,但建议先打通一条链路,再补另一条,避免排障时变量过多。
二、版本兼容性:不是"越新越好"
MATLAB 对 Python 版本的支持是按 MATLAB 发行版逐版限定的,并非任意组合都能工作。例如 MATLAB R2023a/R2023b 通常支持 Python 3.9~3.11 区间,R2022b 支持到 3.10,而更早的版本可能只支持到 3.8 或 3.9。具体支持矩阵必须以 MathWorks 官方文档中对应发行版的说明为准,不能凭经验假设。
检查方法很直接:在 MATLAB 命令窗口执行 version 获取发行版号,在系统终端执行 python --version 获取解释器版本,然后对照官方支持表。若版本不匹配,典型表现是引擎安装成功但 start_matlab 报错,或 MATLAB 中 py.version 无法执行。此时优先调整 Python 版本(用 conda 或 pyenv 建独立环境),而不是反复重装 MATLAB。
conda create -n matpy python=3.10,把引擎包和项目依赖都装在这个环境里,避免与系统全局 Python 冲突。三、安装与路径配置的关键动作
Python 端安装引擎包时,需要进入 MATLAB 安装目录下的引擎文件夹执行安装,而不是直接 pip install matlabengine(后者在部分版本可用,但版本对应关系容易出错)。典型命令如下(路径按实际安装位置替换):
# Windows 示例,先激活目标虚拟环境
conda activate matpy
cd "C:\Program Files\MATLAB\R2023b\extern\engines\python"
python setup.py install
MATLAB 端调用 Python 时,需要让 MATLAB 知道解释器位置。可在 MATLAB 中执行 pyenv('Version','C:\Users\me\miniconda3\envs\matpy\python.exe') 指定解释器,并用 pyenv 查看当前配置。若希望每次启动自动生效,可把 pyenv 调用写入 startup.m。
环境变量方面,常见需要关注的是 PATH 中 Python 与 MATLAB 的先后顺序,以及 PYTHONPATH 是否被历史配置污染。若系统中存在多个 Python,PATH 顺序会决定命令行默认解释器,进而影响引擎安装位置与运行位置不一致的问题。排查时用 where python(Windows)或 which python(Linux/macOS)确认实际解析到的路径。
四、基础调用测试:用最小用例确认链路
环境配置完成后,不要直接上复杂项目,而应先用最小用例验证两个方向。Python 端测试脚本如下:
import matlab.engine
eng = matlab.engine.start_matlab()
result = eng.sqrt(4.0)
print(result) # 期望输出 2.0
eng.quit()
MATLAB 端测试则在命令窗口执行:
pyenv
py.version
py.math.sqrt(4)
判断标准很明确:Python 端 sqrt(4.0) 返回 2.0,MATLAB 端 py.math.sqrt(4) 返回 2.0,说明两个运行时已能互相加载并完成一次函数调用。若 Python 端报 ModuleNotFoundError: No module named 'matlab',说明引擎包装在了另一个解释器里;若 start_matlab 报版本错误,回到兼容性检查;若 MATLAB 端 py.version 报错,检查 pyenv 输出是否指向预期路径。
五、一份可执行的搭建检查清单
| 检查项 | 操作/命令 | 通过标准 |
|---|---|---|
| MATLAB 发行版 | version |
记录版本号,如 R2023b |
| Python 版本 | python --version |
落在该 MATLAB 支持区间内 |
| 虚拟环境 | conda activate matpy |
提示符显示 matpy |
| 引擎包安装 | python setup.py install |
无报错,pip show matlabengine 可见 |
| MATLAB 端解释器 | pyenv |
路径指向 matpy 环境 |
| Python 调 MATLAB | eng.sqrt(4.0) |
返回 2.0 |
| MATLAB 调 Python | py.math.sqrt(4) |
返回 2.0 |
pyenv 指向了另一个 Python,导致 MATLAB 端与 Python 端使用的解释器不一致。两端必须指向同一个解释器,这是后续数据交换不出错的前提。