使用 MATLAB Compiler SDK 打包用于部署的代码
支持的平台:Windows®、Linux®、Mac
此示例说明如何使用 MATLAB® Compiler SDK™ 将 MATLAB 函数打包成可部署存档,并创建示例应用程序来调用该函数。有关应用程序部署工作原理的详细信息,请参阅使用 MATLAB Compiler 进行部署的步骤。
对于此示例,您创建一个 Python® 包并将其集成到由 MATLAB Compiler SDK 生成的 Python 应用程序中。
前提条件
验证是否已满足使用 MATLAB Compiler SDK 和运行 Python 应用程序的系统要求。有关详细信息,请参阅MATLABCompiler SDK Python 目标要求。
无法访问 MATLAB 的编译工件的最终用户必须安装 MATLAB Runtime。使用 MATLAB Compiler SDK 编译的工件需要与之匹配且更新级别相同或更高的 MATLAB Runtime 版本。您可以将 MATLAB Runtime 包含在 Python 包的安装程序中,也可以单独安装它。有关详细信息,请参阅下载并安装 MATLAB Runtime。
在 MATLAB 中创建函数
编写您打算在目标语言应用程序中调用的 MATLAB 代码。您的 MATLAB 代码必须遵循某些规范才能部署。有关详细信息,请参阅编写可部署的 MATLAB 代码。
对于此示例,假设您公司的成本函数(表示与管理库存关联的总成本)定义如下:
D 是年需求量
Q 是订单数量
S 是每笔订单的订单成本
H 是每年每单位的持有成本
P 是每单位的采购成本
您可以使用 MATLAB 函数 fminsearch
求使总成本 C(Q)
最小化的订单数量 Q
。创建一个名为 fms.m
的函数,该函数接受订单数量、年需求量、每笔订单的成本、每年每单位的持有成本和每单位的采购成本的初始估计值,并输出最优订单数量和成本。
function [Q_optimal, cost_optimal] = fms(Q_initial_guess, D, S, H, P) cost_function = @(Q) D/Q * S + Q/2 * H + D * P; [Q_optimal, cost_optimal] = fminsearch(cost_function, Q_initial_guess) end
创建示例 MATLAB 脚本
MATLAB Compiler SDK 可以生成目标语言的示例代码,演示如何调用 MATLAB 导出的函数。您可以使用这些示例来实现自己的应用程序或测试编译的工件。有关详细信息,请参阅创建示例代码来调用导出函数。
创建一个 MATLAB 示例脚本,该脚本使用定义的输入值调用您的函数。将以下代码保存在名为 fmsSample1.m
的示例文件中。
% Sample script to demonstrate execution of function [Q_optimal, cost_optimal] = fms(Q_initial_guess, D, S, H, P) Q_initial_guess = 100; % Initialize Q_initial_guess here D = 10000; % Initialize D here S = 50; % Initialize S here H = 0.5; % Initialize H here P = 10; % Initialize P here [Q_optimal, cost_optimal] = fms(Q_initial_guess, D, S, H, P)
打包后,生成的 Python 示例代码使用与相应 MATLAB 示例文件中相同的输入值调用导出的函数。
将 MATLAB 代码打包成可部署存档
您可以在 MATLAB 命令行中或使用图形界面编译可部署存档。有关选择要使用的打包方法的信息,请参阅选择部署选项。
对于此示例,使用 compiler.build.pythonPackage
函数编译 Python 包。
使用
compiler.build.pythonPackage
函数和fms.m
函数编译 Python 包。使用名称-值参量指定包名称并添加示例文件。您可以使用名称-值参量在compiler.build
命令中指定其他选项。有关详细信息,请参阅compiler.build.pythonPackage
。buildResults = compiler.build.pythonPackage("fms.m", ... PackageName="Optimize", ... SampleGenerationFiles="fmsSample1.m", ... Verbose="on");
compiler.build.Results
对象buildResults
包含有关编译类型、生成的文件、包含的支持包和编译选项的信息。该函数会在当前工作目录中名为
OptimizepythonPackage
的文件夹中生成以下文件:samples\fmsSample1.py
- Python 示例应用程序。Optimize\__init__.py
- 方便导入您的包的 Python 初始化代码。Optimize\Optimize.ctf
- 包含您的 Python 包的可部署存档。GettingStarted.html
- 包含有关集成您的包的信息的 HTML 文件。includedSupportPackages.txt
- 列出包中包含的所有支持文件的文本文件。mccExcludedFiles.log
- 包含应用程序中未包含的任何工具箱函数列表的日志文件。有关不支持的函数的信息,请参阅 MATLAB Compiler 限制。pyproject.toml
- 包含编译系统要求和信息的配置文件,pip
需要使用这些内容来编译包。有关详细信息,请参阅pip.pypa.io/en/stable/reference/build-system/pyproject-toml
。readme.txt
- 包含打包和接口信息的文本文件。requiredMCRProducts.txt
- 包含 MATLAB Runtime 运行应用程序所需产品的产品 ID 的文本文件。setup.py
- 用于安装Optimize
包的 Python 脚本。unresolvedSymbols.txt
- 包含有关未解析符号的信息的文本文件。
注意
生成的包不包含 MATLAB Runtime 或安装程序。要使用
buildResults
对象创建安装程序,请参阅compiler.package.installer
。
安装和运行生成的示例应用程序
创建 Python 包后,您可以从 Python 应用程序调用 fms
函数。有关创建调用打包的 MATLAB 函数的应用程序的信息,请参阅将工件与目标语言应用程序集成。
此示例使用在打包过程中生成的 Python 示例代码 OptimizepythonPackage\samples\fmsSample1.py
。您可以将此示例应用程序代码用作指南来编写您自己的 Python 应用程序。
#!/usr/bin/env python
"""
Sample script that uses the Optimize package created using
MATLAB Compiler SDK.
Refer to the MATLAB Compiler SDK documentation for more information.
"""
import Optimize
# Import the matlab module only after you have imported
# MATLAB Compiler SDK generated Python modules.
import matlab
try:
my_Optimize = Optimize.initialize()
except Exception as e:
print('Error initializing Optimize package\\n:{}'.format(e))
exit(1)
try:
Q_initial_guessIn = matlab.double([100], size=(1, 1))
DIn = matlab.double([10000], size=(1, 1))
SIn = matlab.double([50], size=(1, 1))
HIn = matlab.double([0.5], size=(1, 1))
PIn = matlab.double([10], size=(1, 1))
Q_optimalOut, cost_optimalOut = my_Optimize.fms(Q_initial_guessIn, DIn, SIn, HIn, PIn, nargout=2)
print(Q_optimalOut, cost_optimalOut, sep='\n')
except Exception as e:
print('Error occurred during program execution\\n:{}'.format(e))
my_Optimize.terminate()
Python 示例应用程序执行以下操作:
导入
Optimize
包使用
try
-catch
代码块处理异常初始化名为
my_Optimize
的Optimize
对象为每个输入参量创建
matlab.double
对象调用
fms
方法并将输出保存到Q_optimalOut
和cost_optimalOut
输出
Q_optimalOut
和cost_optimalOut
的内容终止
my_Optimize
实例
在系统命令提示符下,导航到 MagicSquarePkgpythonPackage
文件夹。使用 python
命令安装 Optimize
包。
python -m pip install .
有关安装 Python 包的详细信息,请参阅安装并导入 MATLAB Compiler SDK Python 包。
如果您已安装 MATLAB Runtime,则可以在系统命令提示符下运行该应用程序。出于测试目的,您还可以在 MATLAB 命令行窗口中运行命令,方法是在该命令前加上 !
运算符。
python fmsSample1.py
Python 示例应用程序会返回与示例 MATLAB 脚本相同的输出。
1414.2135620117188 100707.10678118655
注意
在 macOS 上,您必须使用 mwpython
脚本,而不能使用 python
。例如,mwpython fmsSample1.py
。
mwpython
脚本位于
文件夹中,其中 matlabroot
/binmatlabroot
是 MATLAB 或 MATLAB Runtime 的安装位置。
另请参阅
compiler.build.pythonPackage
| mwpython