报错的语句是:
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中报错信息就很详细,可以直接上网查询解决方式,不用自己组织语言。
总结
联合仿真报错无法精确定位,打标签定位错误的方式很有逻辑性也很实用,但是打完记得将 *** 作过的文件复原。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)