Matlab调用Python函数,出现OSError: [WinError 126] 找不到指定的模块报错

在MATLAB中调用Python函数时遇到`OSError: [WinError 126] 找不到指定的模块`的问题。该错误通常由于缺失DLL文件或其依赖项引起。解决方案包括检查DLL文件的存在并复制到根目录,或使用Dependencies工具查找并补充缺失依赖。问题源可能在于Python文件的特定语句,如在调用PyTorch库时出现问题。通过在MATLAB中直接运行Python代码片段,可以更精确地定位和解决问题。

报错内容及解决方式:

报错的语句是:

py.importlib.import_module('main_matlab')

报错的内容为:

OSError: [WinError 126] 找不到指定的模块。 Error loading"(文件路径)/***.dll" or one of its dependencies.

解决方式:

上述报错提示我们系统缺少该dll文件或其对应的依赖项,

  • 先到对应路径查看该dll文件是否存在
  • 若不存在,直接在Anaconda配置环境的文件夹搜索,一般都可以找到。将找到的dll文件复制粘贴到根目录
  • 若存在,说明是缺少该dll文件的依赖项,使用Dependencies工具查看所需要的依赖项,后补齐到根目录

参考文献:

Pyinstaller打包Pytorch框架所遇到的问题_python_脚本之家 (jb51.net)


原始问题描述

在TRNSYS_Python联合仿真过程中,由于存在TRNSYS与Matlab的连接,Matlab与MySQL的连接,Matlab与Python的连接,Python与MySQL的连接,直接运行TRNSYS计算报错不显示具体位置,所以需要设置错误标签便于定位,最后定位到上述Matlab不能调用Python文件的情况仍花费很多时间。


解决过程

TRNSYS中报错如下:

 

由mFileErrorCode=120及info(7)=0&info(13)=0定位到m文件中出现上述变量值的位置,发现是一个函数调用出错,此函数内包含调用py文件的语句及数据库的连接与查询操作语句,暂时不能明确是哪些语句出现问题。

于是我通过打标签的方式检查是函数中的哪一句出现了问题,具体操作方式如下:

1.检验Matlab与MySQL连接正常

2.在之前定位到的函数内每一句之间插入写入数据库操作

3.再重新运行TRNSYS,通过数据库里表格里显示的数值成功定位到函数内出问题的语句。

问题就出在设置的python文件无法调用,一般的思路就是Python的文件里的代码可能有问题,如果代码不复杂,就在Pycharm里运行代码看看是否有报错。

但是我的Python文件跑出来并未报错,于是我又采用逐步定位的方式,将Python中的代码一段一段解开注释,并在Matlab中调用该文件,最终将出问题的地方定位在import torch语句上。

其实这种方式可以在Matlab中一步解决,就是直接在Matlab命令行里执行文本开头报错的那段代码,Matlab会直接指出调用的Python文件中是哪一句出现了问题。

我自己的那种方式也只能定位错误,不能指出错在哪,而Matlab中报错信息就很详细,可以直接上网查询解决方式,不用自己组织语言。


总结

联合仿真报错无法精确定位,打标签定位错误的方式很有逻辑性也很实用,但是打完记得将操作过的文件复原。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嗲墩墩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值