打包流程:
-
进入带打包的文件夹目录,输入“cmd”
-
在cmd对话框中输入
pyinstaller -F -w -i 【exe图标位置(ico文件)】【程序入口文件】
pyinstaller -F -w -i i.ico test.py
具体如图,图片摘自python利用pyinstaller打包简明教程
-
运行完成后,文件夹下会新增三个文件,bulid、dict和一个.spec文件,其中dict文件夹下有打包好的exe文件。
注意事项:
- 文件夹路径貌似必须是英文,因为我第一次打包路径有中文,结果打包失败,提示
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
改成英文后,打包成功了(不太清楚是不是这个原因)。 - 打包成功后,出现了提示,我也不清楚什么原因,后来卸载了pyinstaller,重新安装了一下问题就解决了,python解决“failed to execute pyi_rth_pkgres”问题
注意事项:
- 程序窗口左上角的图标,直接用
root.iconbitmap('i.ico')
,打包后是没办法修改图标的,亲自测试比较好用的办法是 python tkinter把图标一起打包到exe中,先将图标变为bse64格式,变为一个.py文件,再通过import导入到程序中,这样打包好后才可以使得图标成功显示在程序窗口的左上角。
具体代码:
import base64
open_icon = open("i.ico","rb") # i.ico为图标文件
b64str = base64.b64encode(open_icon.read())
open_icon.close()
write_data = "img = '{0}'".format(b64str)
f = open("icon.py","w+") # 运行成功后会出现一个icon.py文件
f.write(write_data)
f.close()
然后在主程序中这样添加一下即可:
import base64
from icon import img
import os# 将import进来的icon.py里的数据转换成临时文件i.ico,作为图标
tmp = open('tmp.ico', 'wb+')
tmp.write(base64.b64decode(img))
tmp.close()
root.iconbitmap('tmp.ico')
os.remove('tmp.ico')root.mainloop()
- 尽量使用
from xx import xxx
方式导入,这样打包后的exe程序的大小相比直接使用import xx
会小很多。我本来写了一个很小的程序,结果打包好后竟然达到了213M,后来精简导包方式,压缩到34M。