最近写了一个项目,在对接时需要将算法整体和相应的实时数据以及一些依赖包写成一个离线的exe文件
条件和需求:
I) 原始的算法会不断更新数据进行算法实时结果的输出;
II) 该算法会依赖一些python的库,例如:numpy pandas math 等;
III) 并且是多个py文件进行打包,但是有一个是主文件,其他的是依赖的子函数py文件。
即我在打包成exe文件是需要考虑如下问题:
1) 如何将数据加载到打包的命令中?如何在打包后的文件下,可以修改数据文件下的数据,从而可以达到不同的实时数据会有不同的预测结果生成?
2) 有多个自定义的Py文件,一个是主文件(用tkinter写的界面),其他的是主函数中需要的子函数依赖py文件?
3)需要python的一些依赖库,例如:numpy pandas time datetime等模块
注意:下面的尝试全基于已经安装好了pyinstaller基础上,安装过程自行搜索网上教程;如果有pycharm解释器,更简单!
过程:
1. 首先直接 pyinstaller -D main_math.py -p dataprocessed_math.py --add-data "E:\Pycharm_Workspace\小松补库项目\Final_version\sysdata;E:\Pycharm_Workspace\小松补库项目\Final_verson\exdata;E:\Pycharm_Workspace\小松补库项目Final_version\curdata;E:\Pycharm_Workspace\小松补库项目\Final_version\Resupply_order" --hidden-import numpy --hidden-i
mport pandas --hidden-import math --hidden-import time --hidden-import datetime --hidden-import tkinter
报错;数据的文件夹写法有问题,无法生成! 于是先不考虑数据的问题,先跑通!
针对第二个问题是直接先放主程序py文件main_math.py,然后再是依赖的子py文件-p dataprocessed_math.py。
针对第三个问题的依赖库的问题用如下方式解决: --hidden-import numpy --hidden-import pandas --hidden-import math --hidden-import time --hidden-import datetime --hidden-import tkinter
2.所以修改为:pyinstaller -D main_math.py -p dataprocessed_math.py --hidden-import numpy --hidden-import pandas --hidden-import math --hidden-import time --hidden-import datetime --hidden-import tkinter。
出现了一次报错:Cannot find existing PyQt5 plugin directories
Paths checked: C:/qt64/qt_1544645195969/_h
参考博客:https://blog.csdn.net/chang995196962/article/details/84974175
3.就是用everything搜索PyQt5,找到 /Library/plugins路径下的PyQt5文件夹,将里面的dll动态库 pyqt5qmlplugin.dll复制出来
按照错误提示的路径,一个个的新建文件夹,形成目录。
结果: 可以生成dist文件,其中包含有相应的诸如numpy的依赖库,还有exe文件,可以点击该exe文件执行算法!
4.接下来的问题在于:因为算法涉及到数据的实时更新导入,我们没有在主程序中的相应数据的路径,所以在点击exe生成补库单时,会报错:没有相应的路径!
尝试:去修改生成的main_math.spec文件,将里面的data加入我们现有的数据文件的路径:如下:
然后:pyinstaller -D main_math.spec
但是仍然报错: Unable to find "\Final_version\sysdata" when adding binary and data files.
然后各种搜资料:推荐一篇处理数据的转移的博客:https://blog.csdn.net/pipisorry/article/details/50620495
在dist文件夹下,先新建我需要的文件夹路径(4个),然后根据这个来修改main_math.spec文件:
再次尝试:在终端下pyinstaller -D main_math.spec
好像可以了 hahahahaha 微笑!!!
目前采用的方法是:
先pyinstaller -D main_math.py -p dataprocessed_math.py --hidden-import numpy --hidden-import pandas --hidden-import math --hidden-import time --hidden-import datetime --hidden-import tkinter
然后修改main_math.spec文件
最后再在终端运行pyinstaller -D main_math.spec