python库和matlab的sdk

matlab打包成python库使用中遇到了这样的问题
代码如下:

#!/usr/bin/env python
"""
Sample script that uses the EX_4 module created using
MATLAB Compiler SDK.

Refer to the MATLAB Compiler SDK documentation for more information.
"""

from __future__ import print_function
import EX_4
import matlab

my_EX_4 = EX_4.initialize()

waveIn = matlab.double([0.0], size=(1, 1))
IIn = matlab.double([0.0], size=(1, 1))
my_EX_4.ex_4(waveIn, IIn, nargout=0)

my_EX_4.terminate()
python报错如下:
C:\Users\10413\AppData\Local\Microsoft\WindowsApps\python3.9.exe F:\competition_of_wuli\ex_2\EX_4\for_redistribution_files_only\samples\ex_4Sample1.py 
Traceback (most recent call last):
  File "F:\competition_of_wuli\ex_2\EX_4\for_redistribution_files_only\samples\ex_4Sample1.py", line 13, in 
    my_EX_4 = EX_4.initialize()
AttributeError: module 'EX_4' has no attribute 'initialize'

Process finished with exit code 1

在打包过程之中没有遇到任何报错。步骤也是参照着https://ww2.mathworks.cn/help/compiler_sdk/gs/create-a-python-application-with-matlab-code.html来的。不太清楚哪里错了。可以指正下吗?谢谢

该回答引用ChatGPT

根据你提供的信息,问题出现在第13行代码中,因为 Python 解释器无法找到名为 'initialize' 的属性。这可能是由于以下原因之一导致的:

未正确安装 MATLAB Compiler SDK。
在打包时,可能未正确指定编译器选项或编译器选项不正确。
在打包时,可能未正确指定 Python 的版本或 Python 环境不正确。
在打包时,可能未正确设置 Python 包的名称或模块的名称。

为了解决这个问题,你可以尝试以下步骤:

确保已正确安装 MATLAB Compiler SDK 并按照文档说明进行了设置。
检查打包时是否正确指定了编译器选项,例如是否指定了要包含的 MATLAB 函数,以及生成的共享库的名称和类型。
确认在打包时指定了正确的 Python 版本和环境,并检查包的名称和模块的名称是否正确设置。
确认在 Python 代码中调用的 MATLAB 函数是否正确,可以尝试使用 MATLAB 命令窗口运行相同的 MATLAB 代码,以验证其是否可以正常工作

可能没正确导入EX_4模块。试试加入这个:


import os
import sys

# 将EX_4模块所在的目录添加到系统路径中
ex_4_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'EX_4'))
sys.path.append(ex_4_path)

参考GPT和自己的思路,根据报错信息 AttributeError: module 'EX_4' has no attribute 'initialize',可能是因为在 EX_4 模块中没有定义 initialize 函数。这个问题可能是由于打包时没有包含 initialize 函数导致的,或者函数名被重命名了。

你可以先检查一下 EX_4 模块中是否包含 initialize 函数,如果没有,则需要在打包时确保该函数被包含进去。如果有,则可能是函数名被重命名了,你需要查看打包时是否有指定 initialize 函数名的别名。

如果你确定 initialize 函数被正确打包,而且函数名没有被重命名,那么你可以尝试使用 dir(EX_4) 来查看 EX_4 模块中包含的所有属性和方法,以确保 initialize 函数被正确导入了。如果 initialize 函数没有出现在列表中,那么你可能需要重新打包代码来解决问题。

可以尝试将代码中的 EX_4.initialize() 改成 EX_4.EX_4.initialize_runtime(),即:

my_EX_4 = EX_4.EX_4.initialize_runtime()

这是因为在使用 MATLAB Compiler SDK 将 MATLAB 代码编译成 Python 模块后,模块的名称实际上是 EX_4.EX_4,而不是简单的 EX_4。因此,需要使用 EX_4.EX_4 来调用模块中的函数。

如果仍然无法解决问题,建议检查一下 MATLAB Compiler SDK 编译的模块中是否有 initialize 函数,或者查看模块的文档来确定正确的调用方法。

此问题终结,直接在cmd中进入"F:\another_try\Detal_R2\for_redistribution_files_only",在把写好的python调用文件写出该文件夹,在再cmd中运行该python文件即可

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据您提供的代码和报错信息,很有可能是您的 EX_4 模块中没有 initialize 属性导致的。

建议您先检查一下 EX_4 模块是否与您使用的 initialize 方法在同一命名空间中。如果不是,请按如下步骤操作:

  1. 确认您已经正确地将 MATLAB 组件编译为 Python 库。

  2. 确认您已经正确地导入 MATLAB 组件。

  3. 检查一下 EX_4 模块是否包含 initialize 方法。

  4. 如果不包含,请检查一下 MATLAB 组件的函数是否已经正确地链接到 Python 库。可以通过查看 libmatlabruntime.py 文件,检查一下组件名称和链接库文件是否正确。

以下代码是可能与您的问题相关的完整示例代码,请参考:

from __future__ import print_function
import matlab.engine

eng = matlab.engine.start_matlab()

# Define inputs to MATLAB function
waveIn = matlab.double([0.0], size=(1, 1))
IIn = matlab.double([0.0], size=(1, 1))

# Call MATLAB function within compiled Python library
out = eng.EX_4(waveIn, IIn)

# Clean up the MATLAB runtime engine
eng.quit()

希望我的回答可以帮到您!
如果我的回答解决了您的问题,请采纳!

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^