Python中用pyinstaller打包时的图标问题及解决方法


Posted in Python onFebruary 17, 2020

前言

因为昨天重新研究了下python的打包方法,今天一番准备把之前写的一个pdf合并软件重新整理一下,打包出来。

但在打包的过程中仍然遇到了一些问题,半年前一番做打包的时候也遇到了一些问题,现在来看,解决这些问题思路清晰多了,这里记录下。

问题

打包成功,但运行时提示Failed to execute script xxx。这里又分很多种原因,这时不要用-w打包,然后在终端.\xxx.exe的方式运行,就可以看到输出日志了。

原因一

D:\02-python\2019-09-30_pdf_opt\dist>.\pdfmerge.exe
Traceback (most recent call last):
  File "pdfmerge.py", line 5, in <module>
ModuleNotFoundError: No module named 'PyPDF2'
[47572] Failed to execute script pdfmerge

这个是因为我们打包的时候用的是系统的pyinstaller命令,而系统的python库里没有安装相应的依赖包,这时要么用退出当前的虚拟环境,要么在进入虚拟环境并给虚拟环境在Scripts下面安装pyinstaller命令。

原因二

D:\02-python\2019-09-30_pdf_opt\dist>.\pdfmerge.exe
Traceback (most recent call last):
  File "pdfmerge.py", line 97, in <module>
  File "tkinter\__init__.py", line 1871, in wm_iconbitmap
_tkinter.TclError: bitmap ".\assert\efon.ico" not defined
[95216] Failed to execute script pdfmerge

这个是因为我们在py代码里指定了程序图标,但pyinstaller不能将依赖文件打包到一个exe里,所以需要我们把图标文件拷贝到当前exe目录下。当然,然后另外的解决办法,就是下面我们要讲的把图标打包到代码里的方法。

把图标打包到代码里首先,编写一个py程序,来自动生成一个包含图标内容的类

import base64
with open("icon.py","w") as f:
  f.write('class Icon(object):\n')
  f.write('\tdef __init__(self):\n')
  f.write("\t\tself.img='")
with open("icon.ico","rb") as i:
  b64str = base64.b64encode(i.read())
  with open("icon.py","ab+") as f:
    f.write(b64str)
with open("icon.py","a") as f:
  f.write("'")

然后执行它,结果是这样的:

Python中用pyinstaller打包时的图标问题及解决方法

然后我们在我们要打包的py程序里去指定这个图标:

with open('tmp.ico','wb') as tmp:
    tmp.write(base64.b64decode(Icon().img))
  window.iconbitmap('tmp.ico')
  os.remove('tmp.ico')

原理就是先把Icon类的里ico数据读出来,转换为二进制再写到当前目录生成一个临时ico,然后指定程序图标,最后删除这个临时图标。

这样就能保证我们的程序一定能在当前目录加载图标。一气呵成,速度非常快,并不会看到有生成临时文件。

如果程序里还有其他外部依赖文件,可以按照同样的道理处理。

这样我们的打包过程就完成啦,最终就只有一个exe文件,然后就可以发布了!

总结

以上所述是小编给大家介绍的Python中用pyinstaller打包时的图标问题及解决方法,希望对大家有所帮助!

Python 相关文章推荐
Python ORM框架SQLAlchemy学习笔记之数据查询实例
Jun 10 Python
Python随机生成一个6位的验证码代码分享
Mar 24 Python
编写Python脚本批量下载DesktopNexus壁纸的教程
May 06 Python
python创建列表并给列表赋初始值的方法
Jul 28 Python
Python实现从log日志中提取ip的方法【正则提取】
Mar 31 Python
Python中property函数用法实例分析
Jun 04 Python
Python Socket编程之多线程聊天室
Jul 28 Python
python 分离文件名和路径以及分离文件名和后缀的方法
Oct 21 Python
PyQtGraph在pyqt中的应用及安装过程
Aug 04 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
May 21 Python
Python同时迭代多个序列的方法
Jul 28 Python
PyCharm中关于安装第三方包的三个建议
Sep 17 Python
Python交互环境下打印和输入函数的实例内容
Feb 16 #Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
Feb 16 #Python
基于python实现微信好友数据分析(简单)
Feb 16 #Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
Feb 16 #Python
python中的 zip函数详解及用法举例
Feb 16 #Python
Python中zip()函数的解释和可视化(实例详解)
Feb 16 #Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 #Python
You might like
Php 构造函数construct的前下划线是双的_
2009/12/08 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
php使用GD实现颜色渐变实例
2015/06/02 PHP
Laravel日志用法详解
2016/10/09 PHP
基于PHP实现生成随机水印图片
2020/12/09 PHP
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
javascript实用方法总结
2015/02/06 Javascript
学习jQuey中的return false
2015/12/18 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
详解JavaScript中的自定义事件编写
2016/05/10 Javascript
js传值后台中文出现乱码的解决方法
2016/06/30 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
JS设置随机出现2个数字的实例代码
2017/07/19 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
详解基于Node.js的HTTP/2 Server实践
2018/05/31 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
微信小程序整合使用富文本编辑器的方法详解
2019/04/25 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
2019/10/10 jQuery
基于JavaScript实现表格隔行换色
2020/05/08 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
python获取糗百图片代码实例
2013/12/18 Python
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
利用python批量检查网站的可用性
2016/09/09 Python
Python实现PS滤镜的旋转模糊功能示例
2018/01/20 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
python爬取微博评论的实例讲解
2021/01/15 Python
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
销售经理工作职责范文
2013/12/03 职场文书
中级会计职业生涯规划范文
2014/01/16 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
《鸡兔同笼》教学反思
2016/02/19 职场文书
护士年终工作总结不会写?各科护士模板总结
2020/01/02 职场文书
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers
CSS 实现角标效果的完整代码
2022/06/28 HTML / CSS