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常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
Aug 25 Python
Python装饰器使用实例:验证参数合法性
Jun 24 Python
python编程实现归并排序
Apr 14 Python
Python3多线程爬虫实例讲解代码
Jan 05 Python
Python批处理更改文件名os.rename的方法
Oct 26 Python
Python多线程threading模块用法实例分析
May 22 Python
浅析python 中大括号中括号小括号的区分
Jul 29 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
Aug 27 Python
Python使用matplotlib 画矩形的三种方式分析
Oct 31 Python
python实现扑克牌交互式界面发牌程序
Apr 22 Python
Python数据可视化实现漏斗图过程图解
Jul 20 Python
Python利用folium实现地图可视化
May 23 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教程 基本语法
2009/10/23 PHP
php allow_url_include的应用和解释
2010/04/22 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
js 判断js函数、变量是否存在的简单示例代码
2014/03/04 Javascript
node.js实现逐行读取文件内容的代码
2014/06/27 Javascript
javascript学习笔记(八)正则表达式
2014/10/08 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
JavaScript编写连连看小游戏
2015/07/07 Javascript
基于JavaScript实现屏幕滚动效果
2017/01/18 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
vue通过watch对input做字数限定的方法
2017/07/13 Javascript
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
Node.js readline模块与util模块的使用
2018/03/01 Javascript
详解基于node.js的脚手架工具开发经历
2019/01/28 Javascript
小程序识别身份证,银行卡,营业执照,驾照的实现
2019/11/05 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
python web框架学习笔记
2016/05/03 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
2019/07/09 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
解决pycharm下pyuic工具使用的问题
2020/04/08 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
用python实现前向分词最大匹配算法的示例代码
2020/08/06 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
CSS3实现缺角矩形,折角矩形以及缺角边框
2019/12/20 HTML / CSS
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
ZINVO手表官网:男士和女士手表
2019/03/10 全球购物
市场营销毕业生自荐信
2013/11/23 职场文书
会计电算化大学生职业规划书
2014/02/05 职场文书
超市开业庆典策划方案
2014/05/14 职场文书
学习十八大的心得体会
2014/09/12 职场文书
2015年营业员工作总结
2015/04/23 职场文书
世界文化遗产导游词
2019/08/07 职场文书
“爱眼护眼,提前预防近视”倡议书3篇
2019/10/30 职场文书