pyinstaller 打包py文件 以及字体、图片等资源的引用

1. 改变控制台的编码格式为utf-8 ,在控制台中输入

  • chcp 65001

2. 一般打包可用 pyinstaller -F -i abc.ico xxx.py --noconsole

3. 参数如下:

参数说明
-F, –onefile打包一个单个文件,如果你的代码都写在一个.py文件的话,可以用这个,如果是多个.py文件就别用
-D, –onedir打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码,我个人比较推荐这样,代码易于维护
-K, –tk在部署时包含 TCL/TK
-a, –ascii不包含编码.在支持Unicode的python版本上默认包含所有的编码.
-d, –debug产生debug版本的可执行文件
-w,–windowed,–noconsole使用Windows子系统执行.当程序启动的时候不会打开命令行(只对Windows有效)
-c,–nowindowed,–console使用控制台子系统执行(默认)(只对Windows有效) , pyinstaller -c xxxx.py , pyinstaller xxxx.py --console
-s,–strip可执行文件和共享库将run through strip.注意Cygwin的strip往往使普通的win32 Dll无法使用
-X, –upx如果有UPX安装(执行Configure.py时检测),会压缩执行文件(Windows系统中的DLL也会)(参见note)
-o DIR, –out=DIR指定spec文件的生成目录,如果没有指定,而且当前目录是PyInstaller的根目录,会自动创建一个用于输出(spec和生成的可执行文件)的目录.如果没有指定,而当前目录不是PyInstaller的根目录,则会输出到当前的目录下.
-p DIR, –path=DIR设置导入路径(和使用PYTHONPATH效果相似).可以用路径分割符(Windows使用分号,Linux使用冒号)分割,指定多个目录.也可以使用多个-p参数来设置多个导入路径,让pyinstaller自己去找程序需要的资源
–icon=<FILE.ICO>将file.ico添加为可执行文件的资源(只对Windows系统有效),改变程序的图标 pyinstaller -i ico路径 xxxxx.py
–icon=<FILE.EXE,N>将file.exe的第n个图标添加为可执行文件的资源(只对Windows系统有效)
-v FILE, –version=FILE将verfile作为可执行文件的版本资源(只对Windows系统有效)
-n NAME, –name=NAME可选的项目(产生的spec的)名字.如果省略,第一个脚本的主文件名将作为spec的名字
–add-datapyinstaller main.py --add-data=src;dest ,打包额外资源

4. 在线ico图标制作

  • http://www.bitbug.net/

5. 报错解决方案

  • 以调试台方式打包运行可以看到错误信息
  • 运行出现"Failed to execute script xxx.exe"错误的解决方式(No module named ‘xxx’)

No module named scipy._lib.messagestream

pyqt5 importError: unable to find Qt5Core.dll on PATH

解决:开头添加代码

import sys, os
if hasattr(sys, 'frozen'):
    os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']
  • 出现ModuleNotFoundError: No module named 'pkg_resources.py2_warn

解决:是由于setuptools升级版本过高
把setuptools降级到44.0.0及以下重新打包即可
pip uninstall setuptools ,
pip install setuptools==39.1.0

  • NotImplementedError: Can’t perform this operation for unregistered loader type

解决:原因是相关资源因路径问题没有加载。
项目路径下面lib\site-packages\pygame中寻找,复制freesansbold.ttf字体文件到EXE的代码中所写的同等路径下(图片资源同理)

进阶解决:

  • 主要思路是用把图片用base64写成py文件之后再导入打包就可以了
  • 假设图标名为logo.ico,先写成py文件:
open_icon = opoen("logo.ico","rb")
b64str = base64.b64encode(open_icon.read())
open_icon.close()
write_data = "img = %s" % b64str
f = open("logo.py","w+")
f.write(write_data)
f.close()
  • 然后在要打包的py文件头加上:
from logo import img
  • 之后便是:
root = tk.Tk()
tmp = open("tmp.ico","wb+")
tmp.write(base64.b64decode(img))
tmp.close()
root.iconbitmap("tmp.ico")
os.remove("tmp.ico")
tk.Label(root,text = "testing logo").pack()
root.mainloop()
  • 用pyinstaller打包生成单个exe文件,然后这个图标就不会因为相对路径的变化而丢失了。
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值