用pyinstaller打包多个python文件及问题解决(较全总结)

用pyinstaller打包多个python文件及问题解决(较全总结)

  • 1.先整理文件,方便打包
  • 2.生成.spec文件并且修改.spec
  • 3.生成可执行文件
  • 4.报错及处理
  • 5.exe运行的时候不要弹出console

1.先整理文件,方便打包

(1)首先我要打包的项目是关于深度学习的,项目包括py文件,xml模型文件,hdf5模型文件,还有xls文件和各种图片文件,为了方便打包,我们把非py文件的全部都放进和py文件并列的文件夹里,如图所示:
用pyinstaller打包多个python文件及问题解决(较全总结)_第1张图片
(2)有一点需要注意的是,在这么整理后,你得保证项目能够正确运转哈,且功能齐全。一切就绪后那么就可以开始打包之旅啦。

2.生成.spec文件并且修改.spec

(1)生成.spec文件
激活你的anaconda环境并通过命令指示符进入到py文件所在的文件夹,例如:我在anaconda上为这个项目专门创建了环境名为exe,由于打包的过程中会打包你依赖的python环境,如果不选择环境,打包的过程中会默认打包根目录的环境,可能会造成不必要的麻烦,所以要养成这种好习惯。

1.直接在命令指示符中激活我的exe环境(然后pip install pyinstaller安装pyinstaller库):
用pyinstaller打包多个python文件及问题解决(较全总结)_第2张图片
2.在上一步的基础上,通过命令指示符进入到py文件所在的文件夹:
用pyinstaller打包多个python文件及问题解决(较全总结)_第3张图片
3.生成.spec文件
pyi-makespec -w xxx.py 主函数,例如:我的主函数是runMain.py,所以我输入pyi-makespec -w runMain.py,命令执行完成后,会生成一个.spec文件,接着进行下一步,修改.spec文件。
在这里插入图片描述用pyinstaller打包多个python文件及问题解决(较全总结)_第4张图片

(2)修改.spec文件
用记事本打开runMain.spec文件,进行修改:把其他的py文件添加进runMain.py后面,然后把文件夹类的添加进binaries里面,按照图中所示的进行添加。
用pyinstaller打包多个python文件及问题解决(较全总结)_第5张图片

3.生成可执行文件

(1)上述修改完成后,继续在命令指示符输入:pyinstaller -D runMain.spec开始进行打包
用pyinstaller打包多个python文件及问题解决(较全总结)_第6张图片
(2)打包成功:
在这里插入图片描述
会生成两个文件夹,buid和dist文件夹,我们会发现,我们的可执行文件在dist文件夹里:
用pyinstaller打包多个python文件及问题解决(较全总结)_第7张图片
双击这个文件夹,如果程序正确执行就没得问题啦,那么这个时候我们打包的最终结果就是这两个文件夹,以后在其他电脑上只需要这两个文件夹的内容就可以执行了。如果不报错的,那么直接看第5条,后面第4条报错及处理就不用看啦,但是我的是有问题的,接下来是我的问题解决方法。

4.报错及处理

(1)我双击dist里面的exe文件的时候,发现程序出现问题了:
用pyinstaller打包多个python文件及问题解决(较全总结)_第8张图片
问题是:no module named ‘keras.engine.base_layer_v1’(可能还会有小伙伴有跟这类似的问题,统一解决办法如下)
解决办法:修改刚刚的那个.spec文件,把缺少的模块补进去,它说缺啥我就补啥!但是注意是补进这个hiddenimports里面哦!
用pyinstaller打包多个python文件及问题解决(较全总结)_第9张图片

然后再次在命令指示符输入:pyinstaller -D runMain.spec重新进行打包就行了。

(2)pthon打包出现load_model require h5py
解决方案:在生成exe时加上一段–hidden-import=h5py.defs,就能搞定了。
pyinstaller --hidden-import=h5py.defs --hidden-import=h5py.utils --hidden-import=h5py.h5ac --hidden-import=h5py._proxy -F runMain.py

5.exe运行的时候不要弹出console

修改spec文件,把console=True改成console=False,然后再次在命令指示符输入:pyinstaller -D runMain.spec重新进行打包就行了。
用pyinstaller打包多个python文件及问题解决(较全总结)_第10张图片

你可能感兴趣的:(python,tensorflow,人工智能,exe)