1. 错误出现情况
- 使用 python调用matlab程序
- 环境使用anaconda搭建
- python版本:3.5
- matlab版本:matlab2016b
应导师要求,使用python调用matlab脚本,并生成exe文件(使用pyinstaller)
错误使用命令:
pyinstaller -F F:\PythonProject\ek80\test.py
生成成功,但是运行时报错
报错的具体信息为:
Traceback (most recent call last):
File "test.py", line 5, in <module>
File "d:\programfiles\anaconda\envs\ek80python\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 623, in exec_module
exec(bytecode, module.__dict__)
File "site-packages\matlab\__init__.py", line 24, in <module>
ImportError: No module named 'mlarray'
[13856] Failed to execute script test
2.解决方案
如果你也是在使用类似场景时出错,不要相信网上一些不负责的教程,例如:–hidden-import命令,完全是浪费时间
step1:构造目录结构
- 在python虚拟环境的目录(笔者的目录是D:\programFiles\anaconda\envs\ek80)下复制准备打包的py文件。
- 在虚拟环境的目录下创建钩子函数。
- test.py # 准备打包的python文件 - hooks # 文件夹 - hook-matlab.py # hooks文件夹下的文件
step2: 编辑hook-matlab.py文件
from PyInstaller.utils.hooks import collect_all
datas, binaries, hiddenimports = collect_all('matlab')
step3:打包命令
在打包命令后加上:
--additional-hooks-dir=hooks
例如:
pyinstaller test.py --additional-hooks-dir=hooks
3. 测试效果
重新打包生成的文件可以完美运行,折腾一晚上的打包工作终于结束了。
PS:这些东西百度的教程确实没哟谷歌的顶用。百度找了半天,全都是不适用的假教程。