IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 解决Python调用matlab,打包失败及更换设备无法调用问题 -> 正文阅读

[Python知识库]解决Python调用matlab,打包失败及更换设备无法调用问题

解决python调用matlab,用pyinstaller打包之后(更换设备)不能运行的问题

1. 打包python文件的过程中可能出现的错误。

使用pyinstaller -D -w mainwindow.py
在这里插入图片描述
打包成功后报错如下所示No moudle named mlarray
在这里插入图片描述

1.1 解决方法1,可以使用命令pyinstaller -D mainwindow.py --additional-hooks-dir=hooks进行打包,在需要打包的ython文件同目录处新建一个hooks文件夹,见下图。(下一种方法更加推荐)

在这里插入图片描述

文件夹内可以放如下两个文件hook-matlab.py以及hook-matlab.engine.py两个文件。如下图所示。
在这里插入图片描述
两个文件的内容分别如下。

hook-matlab.py内容

from PyInstaller.utils.hooks import collect_all

datas, binaries, hiddenimports = collect_all('matlab') 

hook-matlab.engine.py内容

from PyInstaller.utils.hooks import collect_all

datas, binaries, hiddenimports = collect_all('engine')  

1.2 解决方法2,利用spec文件

在这里插入图片描述
本质上,利用spec文件和写命令是一样的,只不过把pyinstaller打包文件的时候,写参数的部分命令放到了文件中,并用规定的格式写出来,此处mainwindow.spec内容如下所示。
其中pathex需要填写的内容为,要使用的python的安装路径下,matlab开发包安装的位置。此处我用的是Anaconda

# -*- mode: python ; coding: utf-8 -*-


block_cipher = None


a = Analysis(['mainwindow.py'],
             pathex=['E:\\Anaconda3\\envs\\pyqtPython\\Lib\\site-packages\\matlab'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             hooksconfig={},
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

exe = EXE(pyz,
          a.scripts, 
          [],
          exclude_binaries=True,
          name='mainwindow',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=False,
          disable_windowed_traceback=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas, 
               strip=False,
               upx=True,
               upx_exclude=[],
               name='mainwindow')


除此之外,还需要找到python安装路径下的pyinstaller包安装的位置,在其hooks文件夹里添加上述hook-matlab.py以及hook-matlab.engine.py两个文件。
在这里插入图片描述
然后执行pyinstaller mainwindow.spec,程序执行成功之后,找到生成的文件夹,执行exe文件,出现如下错误。出现如下错误主要是因为,pyinstaller打包的文件只是python文件,exe文件依赖的matlab包是通过_arch.txt文件来查找的。这里报错主要是因为找不到这个_arch.txt文件在哪。
在这里插入图片描述
解决方法也很简答,就是缺什么补什么就可以了,去python的安装路径下,找到matlab开发包的位置,并将其复制到可执行程序所在的路径下。
将下图位置的matlab文件复制一下。
在这里插入图片描述
然后将其拷贝到,生成的可执行文件的存在路径。
在这里插入图片描述
在这里插入图片描述
然后双击可执行程序,可以发现可以正常运行了。

2. 打包完成的exe程序更换计算机之后不能正常运行

经过上述操作,打包完成的exe程序已经能在开发程序的本地计算机上顺利运行了,但是将其更换到其他计算机的时候就会发现,会报错误如下所示。

找不到程序中matlab开发的包OSError: Please reinstall MATLAB Engine for Python or contact MathWorks Technical Support for assistance: No module named 'matlabengineforpython3_6'

包错误的原因主要是因为,我们开发的exe程序,是通过exe文件依赖的matlab包是通过_arch.txt文件来查找的。打开_arch.txt文件我们可以看到如下信息。
在这里插入图片描述
然后我们在别的电脑上,将里面的路径换成对应电脑上matlab的安装路径就可以正常运行了。
不过这样做的缺点就是,在使用exe的计算机上也需要安装matlab。,并且matlab版本需要和开发程序所需要的python版本对应。比如说,我现在用的是matlab2018a,开发的python版本是3.6,然后我测试电脑上安装的matlab也是2018a版本的,我不确定别的适合python3.6版本matlab是不是可以正常使用。。。。。。。。

3.总结

用的方法比较笨 ,主要是因为,代码已经写好了不想改了,属于是曲线救国了,其实利用python来调用matlab有很多方法,可以打包成dll或者打包成别的开发包之类的,都可以,这个方法纯属采集互啄曲线救国了,,,,,😞

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 11:52:04  更:2022-10-31 11:53:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 2:37:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计