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实现ftp客户端示例分享
Feb 17 Python
使用Python编写一个简单的tic-tac-toe游戏的教程
Apr 16 Python
python re模块的高级用法详解
Jun 06 Python
django解决跨域请求的问题
Nov 11 Python
详解用python写一个抽奖程序
May 10 Python
python文件操作的简单方法总结
Nov 07 Python
Python脚本操作Excel实现批量替换功能
Nov 20 Python
Django ORM 查询表中某列字段值的方法
Apr 30 Python
Python虚拟环境库virtualenvwrapper安装及使用
Jun 17 Python
Pythonic版二分查找实现过程原理解析
Aug 11 Python
Python爬取微信小程序通用方法代码实例详解
Sep 29 Python
Python+Selenium自动化环境搭建与操作基础详解
Mar 13 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
使用array_map简单搞定PHP删除文件、删除目录
2014/10/29 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
获取body标签的两种方法
2011/10/13 Javascript
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
javascript浏览器窗口之间传递数据的方法
2015/01/20 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
Javascript Function.prototype.bind详细分析
2016/12/29 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
JavaScript中利用for循环遍历数组
2017/01/15 Javascript
Angular.js与node.js项目里用cookie校验账户登录详解
2017/02/22 Javascript
使用cropper.js裁剪头像的实例代码
2017/09/29 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
Vue自定义指令实现checkbox全选功能的方法
2018/02/28 Javascript
vue中引入mxGraph的步骤详解
2019/05/17 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
2020/09/11 Javascript
[43:41]OG vs Newbee 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
简单使用Python自动生成文章
2014/12/25 Python
django实现前后台交互实例
2017/08/07 Python
python如何写try语句
2020/07/14 Python
Python迭代器协议及for循环工作机制详解
2020/07/14 Python
今天学到的CSS最新技术(与图片背景相关)
2012/12/24 HTML / CSS
阻止移动设备(手机、pad)浏览器双击放大网页的方法
2014/06/03 HTML / CSS
HTML5实现动画效果的方式汇总
2016/02/29 HTML / CSS
英国安全产品购物网站:The Safe Shop
2017/03/20 全球购物
linux面试题参考答案(3)
2012/09/13 面试题
教师实习自我鉴定
2013/12/13 职场文书
《充气雨衣》教学反思
2014/04/07 职场文书
2014年党员创先争优承诺书
2014/05/29 职场文书
材料物理专业求职信
2014/09/01 职场文书
计算机科学与技术专业求职信
2014/09/03 职场文书
详解Java七大阻塞队列之SynchronousQueue
2021/09/04 Java/Android
css3应用示例:新增的选择器
2022/03/16 HTML / CSS
Python可视化神器pyecharts绘制水球图
2022/07/07 Python