主要内容

生成 Python 包并编译 Python 应用程序

支持的平台:Windows®、Linux®Mac

此示例说明如何从 MATLAB® 函数创建 Python® 包,然后将该包集成到使用 MATLAB Compiler SDK™ 生成的 Python 应用程序中。

前提条件

  • 验证是否已满足生成 Python 包和运行 Python 应用程序的系统要求。有关详细信息,请参阅MATLABCompiler SDK Python 目标要求

  • 最终用户必须安装 MATLAB Runtime 才能运行应用程序。有关详细信息,请参阅下载并安装 MATLAB Runtime

    出于测试目的,您可以使用安装的 MATLAB 来代替 MATLAB Runtime

MATLAB 中创建函数

在 MATLAB 中,检查您想要在 Python 应用程序中使用的 MATLAB 代码。对于此示例,创建一个名为 makesqr.m 的函数,其中包含以下代码:

function y = makesqr(x)
y = magic(x);

在 MATLAB 命令提示符下,输入 makesqr(5)

输出是一个 5×5 矩阵。

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

使用 compiler.build.pythonPackage 创建 Python

使用编程方法编译 Python 包。或者,如果您想使用图形界面创建 Python 包,请参阅使用 Python 包编译器创建 Python 包

  1. 创建调用您的函数的 MATLAB 示例脚本。将以下代码保存在名为 makesqrSample1.m 的示例文件中。

    % Sample script to demonstrate execution of function y = makesqr(x)
    x = 5;
    y = makesqr(x);

    在打包过程中,MATLAB Compiler SDK 会使用该示例 MATLAB 脚本生成目标语言的示例应用程序。有关详细信息,请参阅创建示例代码来调用导出函数

  2. 使用 compiler.build.pythonPackage 函数和您先前创建的 makesqr.m 文件编译 Python 包。使用名称-值参量指定包名称并添加示例文件。您可以使用名称-值参量在 compiler.build 命令中指定其他选项。有关详细信息,请参阅 compiler.build.pythonPackage

    buildResults = compiler.build.pythonPackage('makesqr.m', ...
        'PackageName','MagicSquarePkg', ...
        'SampleGenerationFiles','makesqrSample1.m', ...
        'Verbose','on');

    compiler.build.Results 对象 buildResults 包含有关编译类型、生成的文件、包含的支持包和编译选项的信息。

  3. 该函数会在当前工作目录中名为 MagicSquarePkgpythonPackage 的文件夹中生成以下文件:

    • samples\makesqrSample1.py - Python 示例应用程序文件。

    • MagicSquarePkg\__init__.py - 方便导入您的包的 Python 初始化代码。

    • MagicSquarePkg\MagicSquarePkg.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 - 用于安装包的 Python 文件。

    • unresolvedSymbols.txt - 包含有关未解析符号的信息的文本文件。

    注意

    生成的包不包含 MATLAB Runtime 或安装程序。要使用 buildResults 对象创建安装程序,请参阅 compiler.package.installer

安装和运行 MATLAB 生成的 Python 应用程序

创建 Python 包后,您可以从 Python 应用程序调用该包。此示例使用在打包过程中生成的示例 Python 代码。您可以将此示例 Python 应用程序代码用作指南来编写您自己的应用程序。

  1. 在系统命令提示符下,导航到 MagicSquarePkgpythonPackage 文件夹。

  2. 使用 python 命令安装应用程序。

    python -m pip install .

    有关安装 Python 包的详细信息,请参阅安装并导入 MATLAB Compiler SDK Python 包

  3. 安装包后,导航到包含 makesqrSample1.pysamples 文件夹。

    makesqrSample1.py 的内容如下所示。

    #!/usr/bin/env python
    """
    Sample script that uses the MagicSquarePkg package created using
    MATLAB Compiler SDK.
    
    Refer to the MATLAB Compiler SDK documentation for more information.
    """
    
    import MagicSquarePkg
    # Import the matlab module only after you have imported 
    # MATLAB Compiler SDK generated Python modules.
    import matlab
    
    try:
        my_MagicSquarePkg = MagicSquarePkg.initialize()
    except Exception as e:
        print('Error initializing MagicSquarePkg package\\n:{}'.format(e))
        exit(1)
    
    try:
        xIn = matlab.double([5], size=(1, 1))
        yOut = my_MagicSquarePkg.makesqr(xIn)
        print(yOut, sep='\\n')
    except Exception as e:
        print('Error occurred during program execution\\n:{}'.format(e))
    
    my_MagicSquarePkg.terminate()

    Python 示例应用程序执行以下操作:

    • 导入 MagicSquarePkg

    • 导入 matlab

    • 使用 try-catch 代码块处理异常

    • 初始化名为 my_MagicSquarePkgMagicSquarePkg 对象

    • 创建包含输入参量 xInmatlab.double 对象

    • 调用 makesqr 方法并将输出保存到 yOut

    • 输出 yOut 的内容

    • 终止 my_MagicSquarePkg 实例

  4. 如果您已安装 MATLAB Runtime,则可以在系统命令提示符下运行该应用程序。出于测试目的,您还可以在 MATLAB 命令行窗口中运行命令,方法是在该命令前加上 ! 运算符。

    python makesqrSample1.py

    Python 示例应用程序会返回与示例 MATLAB 脚本相同的输出。

    [[17.0,24.0,1.0,8.0,15.0],[23.0,5.0,7.0,14.0,16.0],[4.0,6.0,13.0,20.0,22.0],
    [10.0,12.0,19.0,21.0,3.0],[11.0,18.0,25.0,2.0,9.0]]

    注意

    macOS 上,您必须使用 mwpython 脚本,而不能使用 python。例如,mwpython makesqrSample1.py

    mwpython 脚本位于 matlabroot/bin 文件夹中,其中 matlabroot 是 MATLAB 或 MATLAB Runtime 的安装位置。

另请参阅

| |

主题