Python用pyinstaller打包第三方库
前言
1.环境:python3.6;
2.程序所涉及第三方库matplotlib等;
一、pyinstaller介绍
1)作用
1)pyinstaller能将python程序转换成单个可执行文件(.exe);
2)操作系统支持Windows, Linux, Mac OS X,Solaris和AIX。并且很多包都支持开箱即用,不依赖环境;
2)安装方法
在cmd里pip install pyinstaller
3)pyinstaller参数介绍
- -F:打包生成单个文件;
- -w:让exe运行过程中不显示控制台;
- -i:为exe程序添加图标;
- -D:打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码;
其余参数自行网上了解
4)使用方法
1.标准:
注意是在cmd中使用
pyinstaller -F -w -i C:\Users\lenovo\Desktop\flower\flower.ico C:\Users\lenovo\Desktop\flower\flower.py
2.说明:
[1]这里使用了绝对路径打包flower.ico和flower.py两个文件。其中flower.ico是配合-i参数的,是用于生成exe的图标。而flower.py是需要打包的python程序;嫌麻烦不想添加图标去掉-i参数和第一个路径亦可正常打包。
[2]当cmd的路径是与.ico和.py文件处于一个文件夹中时,可以不需要使用绝对路径,直接用相对路径即可;
pyinstaller -F -w -i flower.ico flower.py
[3]注意,打包后生成的几个文件夹会生成在cmd当前路径下。
5)泣血,使用中遇到的天坑
- 问题一:打开cmd后使用默认路径直接打包,会报错。原因不清楚,但有解决办法;
使用默认路径会报错
解决办法:创建一个文件夹,放入待打包.ico和.py文件,cmd中路径切换到该文件夹下再打包;
2.问题二:打包成功后exe文件运行失败。原因是程序中使用了其它第三方库,没有打包其运行需要的相应module。
解决办法:再pyinstaller打包过程中,仔细阅读info、error、warning等信息,缺少哪个module就去pip安装哪个;
eg:这朵花是使用matplotlib花的,打包后提示缺少相关的PyQt4和PySide等等module;
我就使用pip指令安装这些modlue。但是pip安装失败了。
原因是Python中最头疼的包版本和python版本的不匹配问题。
PyQt4和PySide与我的python3.6不匹配,于是通过安装PyQt5和PySide2替代解决了,也没有
报错;
3.问题三:由于exe可能会运行失败,建议调试时不要使用-w参数隐藏控制台,这样会导致看不见报错信息。但是报错信息可能会一闪而过
解决办法:在cmd中打开此exe程序,报错信息就不会一闪而过。- 问题四:-w参数使用失败,去掉-w参数却能打包成功。俺嫌麻烦,没试。不带-w参数解决了问题。。。。。。。
解决办法:链接
二、代码
知乎上看见的,觉得有意思自己实践了一下。
源码链接