目录
一、安装pyinstaller库
二、执行生成exe文件
三、命令分析
(一)、基础命令
(二)、将库文件单独存放在目录中
(三)、利用spec文件进行打包
四、动态导入的库
5、踩坑记录
1、pyinstaller打包exe文件闪退解决方案
一、安装pyinstaller库
直接命令行pip安装
我们现在有一个雷霆战机的小游戏, 名为plane_war.py
现在我们打开cmd, 进入到该目录下
输入下面的命令
pyinstaller plane_war.py --workpath E:tmpplane_tmp --distpath E:plane --icon="E:yun_projectThunderfighterimgthunderfighter.ico" --runtime-hook="E:yun_projectThunderfighterruntimehook.py"生成后的效果
三、命令分析
(一)、基础命令 pyinstaller 指定了当前目录需要制作的python文件–workpath 指定了制作过程中临时文件的存放目录–distpath 指定了最终的可执行文件目录所在的父目录–icon="" 指定了应用程序图标,必须是ico格式–runtime-hook="" 将库文件放到单独的一个目录中–noconsole 有图形界面可用该参数去掉DOS黑窗口,引用该参数就可以啦,它的缺省值就是True,只对windows有效
注意:
1、能够from xxx import yyy就尽量不要import xxx,这样可以减少打包后的体积。
2、最好在纯python环境下打包,在anaconda环境下,会生成很多不必要的包
在线转ico网址 https://www.zamzar.com/convert/png-to-ico/
或者直接取图标网站获取:https://www.easyicon.net/
noconsole 有图形界面可用该参数去掉DOS黑窗口, 我在生成时引用该参数后,生成的EXE文件没法执行了,而其他步骤没有问题,如果没有必要不要使用。
(二)、将库文件单独存放在目录中
上面这样操作后,大家可以发现我们只要运行Send_email.exe文件,但是该目录下却有很多其他的.dll 之类的库文件。
这使得我们要寻找并运行程序时,要在这么多文件中找到 .exe 文件,比较费劲。
我们可以通过如下方法,把这些库文件放到 单独的一个 目录中。 这样.exe所在的目录就显得比较清爽了,也好找到.exe文件了。
我们添加一个Python代码文件,名为 runtimehook.py
其内容如下
上面的命令指定 生成的.exe运行时,会先执行 runtimehook1.py 里面的代码。
这样就会指定 .exe 程序所在的目录下面的lib目录:
Python库搜索路径,这是由 sys.path.append(libdir) 指定的。
动态链接库文件的 搜索路径,这是由 os.environ[‘path’] += ‘;./lib’ 指定的。
上面的命令执行结束后,我们进入到目录distpathsend-eamil 中,新建一个名为 lib 的目录,把除了下面的几个文件之外的所有其他文件都放到lib目录里面。
我按照博主的步骤操作以后, 生成EXE文件就没法正常运行了, 可能是我没有操作对,还是需要再实验一下。
(三)、利用spec文件进行打包
一般而言,pyinstaller的基本用法已经够用了,但是有特殊需求,比如打包图片资源文件时,就必须用到它的高阶功法了。
首先得了解spec文件,简而言之,spec文件就是一份告诉pyinstaller如何打包的配置文件。
可以通过pyi-makespec demo.py来生成demo.spec文件。其内容如下:
对于上面这个文件,需要注意两点:
除了resources配置是我添加修改之外,其余全是自动生成,这个配置是用来添加资源文件的。
pathex是工程的根目录。
生成并配置好spec文件后,我们可以通过pyinstaller demo.spec来执行打包任务。
可以通过先执行一遍打包命令,然后会自动生成spec文件,然后再修改spec文件。
四、动态导入的库
有的时候,我们运行打包好的程序,会出现导入库错误的提示,比如下面
ImportError: could not import module 'PySide2.QtXml'PyInstaller 没法分析出动态导入的库有哪些,我们可以通过命令行参数 --hidden-import 告诉它。
比如,如果我们运行出现
could not import module 'PySpder.QtXml'错误 , 就可以这样
pyinstaller httpclient.py --hidden-import PySpider.QtXml好啦,本期的分享就到这。小伙伴们如果喜欢的话,欢迎点赞评论走一波。如果有不足之处,还请多多指正呀。
打开cmd, 进入到文件夹中执行EXE文件, 可以看到错误信息,然后根据错误信息进行改正
6、补充 :pyinstaller基本用法假如我们要打包一个demo.py文件,基本过程是:
打开cmd,并切换到demo.py文件所在的目录,注意路径中不要有中文
执行命令:pyinstaller demo.py
在当前的目录下,将会生成两个文件夹:build和dist。dist里面就是所有可执行文件,点击demo.exe就能运行了。
pyinstaller指令的常见可选参数:
可选参数格式举例功能说明-Fpyinstaller -F demo.py只在dist中生产一个demo.exe文件。-Dpyinstaller -D demo.py默认选项,除了demo.exe外,还会在在dist中生成很多依赖文件,推荐使用。-cpyinstaller -c demo.py默认选项,只对windows有效,使用控制台,就像编译运行C程序后的黑色弹窗。-wpyinstaller -w demo.py只对windows有效,不使用控制台。-ppyinstaller -p E:pythonLibsite-packages demo.py设置导入路径,一般用不到。-ipyinstaller -i D:file.icon demo.py将file.icon设置为exe文件的图标,推荐一个icon网站:icon上面的可选参数可以组合使用,比如pyinstaller -F -i D:file.icon demo.py。
能够from xxx import yyy就尽量不要import xxx,这样可以减少打包后的体积。
作者:inspurer
链接:https://www.jianshu.com/p/48f6dea265eb
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
参考文章:
1、https://blog.csdn.net/m0_46683744/article/details/106201841
2、https://blog.csdn.net/weixin_44493841/article/details/97887009
3、https://blog.csdn.net/bearstarx/article/details/81054134
4、https://www.jianshu.com/p/48f6dea265eb
5、https://zhuanlan.zhihu.com/p/65731845
6、http://legendtkl.com/2015/11/06/pyinstaller/