• 【移植代码】matlab.engine报错、numpy+mkl安装、Qt platform plugin报错总结



    今天的任务是复现师姐的代码,代码在服务器的环境下可以跑,而我要做的,就是将环境和源码配置好,在我自己的电脑上跑起来。本以为只是一个虚拟环境复制的工作,没想到有这么大的坑。

    已经将服务器上的整个虚拟环境evns的文件夹拷贝了过来,并进入该环境测试。

    numpy报错

    pythonnumpy版本不匹配的时候,经常会出现莫名的报错,此时需要卸载重装:
    numpy卸载的时候往往要卸载两遍
    pip uninstall numpy命令卸载的时候,卸载过后可能发现pip list中还有一个版本,需要再卸载一次。

    numpy安装

    直接用pip install安装的话可能会自动安装最新版本的,还是对不上,因此需要参考这篇博客的做法。用numpy+mklscipy的第三方库:https://www.lfd.uci.edu/~gohlke/pythonlibs/
    选择自己的环境对应的版本下载即可,cp36python=3.6win_amd64win是64位。image.png
    下载好之后,把这两个包放在python安装的Scripts目录下。
    如果是自己的虚拟环境,那么就在自己虚拟环境对应的Scripts目录下。
    安装时,首先要在终端将工作空间定位到我们放安装包的目录下,然后再进行安装。
    image.png

    PyQt5报错

    调试的时候会有这种报错。
    image.png
    用网上的其他方法都不太好
    解决办法:检查pip list 是否缺少PyQt5

    pip install PyQt5
    pip install pyqt5-tools
    
    • 1
    • 2

    记着更换源会快一些

    pip install --user -i https://pypi.tuna.tsinghua.edu.cn/simple pyqt5
    pip install --user -i https://pypi.tuna.tsinghua.edu.cn/simple pyqt5-tools
    
    • 1
    • 2

    不知道在服务器上怎么跑起来的,不过在自己电脑上查看pip list确实没有PyQt5

    matlab.engine无法加载

    因为代码中有涉及用python执行matlab的.m文件的情形,因此在反复matlab.engine报错之后,突然意识到,自己电脑上python和matlab是没有像服务器上的那样已经配合好了的。
    详细请看这篇博客。

    确认配置版本

    python版本和matlab版本是有一一对应关系的,否则无法建立联系,对应关系见下。https://www.mathworks.com/content/dam/mathworks/mathworks-dot-com/support/sysreq/files/python-compatibility.pdf

    image.png
    python 与 matlab 版本对应关系

    由图可知Python3.8解释器需要 matlab2020b以上版本,Python3.7解释器需要 matlab2019a以上版本等等依此类推。

    根据这张图确定你的python解释器去安装对应的matlab版本。

    进行配置

    matlab的安装方法就不累赘了,这里已默认你安装好了对应版本的matlab。

    matlab里面找到python engine

    大部分python库都是通过pip来安装的,而matlab自R2014b以后引入了MATLAB engine这一功能, 提供了对Python的支持,matlab.engine的安装不是通过pip安装的。

    matlab安装路径\extern\engines \python 文件夹
    image.png

    cmd方法配置连接

    进入控制台,**如果用了虚拟环境记得一定要conda activate进入虚拟环境。**进去找到python engine的位置

    见下图红色方框,在后面输入语句,见下图椭圆方框,enter 确认。

    python setup.py install
    
    • 1

    image.png
    enter确认后发现cmd界面运行一堆语句,咱不用管,见下运行过程
    image.png

    …R2021a-py3.7.egg-info,这告诉我们python3.7 解释器可以调用matlab了,注意一定要符合自己所需python的版本哦。

    image.png

    运行完之后我们发现之前的python engine路径多了些文件,见下图,相比之前多了一个build文件夹

    image.png

    至此python配置matlab就已经配置完成了,就可以用python 调用 matlab方法 进行调用matlab函数了。

    matlab文件路径缺失

    最后执行到某句的时候,出现了这个报错:

    未定义与 'double' 类型的输入参数相对应的函数 'stblfit'
    
    • 1

    看报错位置是.m文件内部,就意识到了应该是文件夹没有加入matlab的执行路径内。

    点这里的设置路径
    R(IG_MB3CJGF(J7US{4UE8L.png


    将自己python代码的文件夹(也就是要执行的.m文件所在的文件夹添加进去,就可以顺利跑了)

    vscode无法debug3.7以下版本

    在调试代码的时候,突然发现更新之后的vscode给我说python版本是3.6,已经不支持了?
    查了一下是vscode扩展版本的问题,只需要重新安装低版本的python插件即可。
    照着这个

    总结

    移植代码真的很多坑啊,不只是python环境的问题,各种依赖包、和matlab的联动,版本不一等等。花了一整个白天的时间去调试:( 。或许用docker能更快移植呢?

  • 相关阅读:
    Java的抽象使用2
    mysql主从异常处理
    Roson的Qt之旅 #115 QML Menu用法
    Creaform形创HandySCAN MAX三维扫描仪大型零部件尺寸测量设备
    [ vulhub漏洞复现篇 ] ActiveMQ任意文件写入漏洞CVE-2016-3088
    MySQL单列索引和联合索引
    知识点7--Docker的容器命令
    文件上传之.htaccess绕过黑名单——upload-labs靶场第四关
    用HTML+CSS做一个漂亮简单的音乐网站
    GPO:在 Start/Logon 中使用 PowerShell 脚本
  • 原文地址:https://blog.csdn.net/QinZheng7575/article/details/133755207