pyinstaller打包程序exe踩过的坑


Posted in Python onNovember 19, 2019

基础环境

  • python 2.7.17
  • pyinstaller 3.5

安装pyinstaller

pip install pyinstaller

坑,大坑,深坑

背景:用pygame写了个贪吃蛇游戏,要打包成exe
用到了字体文件 C:\Windows\Fonts\simsun.ttc (宋体)

打包过程中没有报错
打包过程中的警告可以忽略,这个警告: WARNING: Hidden import “pygame._view” not found!

运行exe的时候报NotImplementedError: Can't perform this operation for unregistered loader type
真的是百思不得其姐,为什么会报这个错????
最终确定,是找不到引用的字体文件,需要指定下,添加如下代码:

def rp(relative_path):
 """ Get absolute path to resource, works for dev and for PyInstaller """
 try:
  # PyInstaller creates a temp folder and stores path in _MEIPASS
  base_path = sys._MEIPASS
 except Exception:
  base_path = os.path.abspath(".")

 return os.path.join(base_path, relative_path)

并且每个文件都要使用该函数转换下地址

BASICFONT = pygame.font.Font(rp('C:\Windows\Fonts\simsun.ttc'), 18)
titleFont = pygame.font.Font(rp('C:\Windows\Fonts\simsun.ttc'), 100)
gameOverFont = pygame.font.Font(rp('freesansbold.ttf'), 100)

再次pyinstaller -F xxx.py生成单个exe后,就可以直接运行不会报错了

上边解决了可能是巧合,因为每个人电脑上都有这个字体

再来个图片的,其他电脑上就没有了
首先,还是那个函数需要加到代码里

def rp(relative_path):
 """ Get absolute path to resource, works for dev and for PyInstaller """
 try:
  # PyInstaller creates a temp folder and stores path in _MEIPASS
  base_path = sys._MEIPASS
 except Exception:
  base_path = os.path.abspath(".")

 return os.path.join(base_path, relative_path)

再者,把src目录下的background.jpg用上方的函数转换下地址,同时打印下地址以观后效

bgimg = rp(os.path.join('src','background.jpg'))
print(bgimg)

使用 pyi-makespec -F 2048.py命令生成spec文件,修改文件内容如下:

指定src目录打包到exe中,运行时生成的临时路径也叫src

pyinstaller打包程序exe踩过的坑

指定命令打包:pyinstaller -F 2048.spec

把2048.exe挪到另一个位置,跑一下看看cmd输出

pyinstaller打包程序exe踩过的坑

生成的临时路径也叫src,且能找到我们的图片。

这时候还是不确定,我们换台机器跑下试试

pyinstaller打包程序exe踩过的坑

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python多重继承新算法C3介绍
Sep 28 Python
python中实现php的var_dump函数功能
Jan 21 Python
Python函数可变参数定义及其参数传递方式实例详解
May 25 Python
Python获取当前函数名称方法实例分享
Jan 18 Python
python中正则表达式 re.findall 用法
Oct 23 Python
使用python进行波形及频谱绘制的方法
Jun 17 Python
python制作简单五子棋游戏
Jun 18 Python
python实现批量修改服务器密码的方法
Aug 13 Python
Python 在局部变量域中执行代码
Aug 07 Python
python中time包实例详解
Feb 02 Python
python代码实现备忘录案例讲解
Jul 26 Python
Python绘制散点图之可视化神器pyecharts
Jul 07 Python
基于Python中的yield表达式介绍
Nov 19 #Python
Python函数式编程指南:对生成器全面讲解
Nov 19 #Python
wxPython电子表格功能wx.grid实例教程
Nov 19 #Python
python 实现return返回多个值
Nov 19 #Python
wxPython实现带颜色的进度条
Nov 19 #Python
Python使用Pandas读写Excel实例解析
Nov 19 #Python
pycharm修改file type方式
Nov 19 #Python
You might like
PHP冒泡排序算法代码详细解读
2011/07/17 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
2014/04/24 PHP
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
YiiFramework入门知识点总结(图文教程)
2015/12/28 PHP
PHP实现随机生成水印图片功能
2017/03/22 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
2011/02/26 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
node.js中使用socket.io制作命名空间
2014/12/15 Javascript
jQuery+AJAX实现无刷新下拉加载更多
2015/07/03 Javascript
JavaScript如何实现图片懒加载(lazyload) 提高用户体验(增强版)
2016/11/30 Javascript
React创建组件的三种方式及其区别
2017/01/12 Javascript
关于使用js算总价的问题
2017/06/23 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
Angular 封装并发布组件的方法示例
2018/04/19 Javascript
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
python模拟新浪微博登陆功能(新浪微博爬虫)
2013/12/24 Python
python 读写txt文件 json文件的实现方法
2016/10/22 Python
Python自动生产表情包
2017/03/17 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
Python爬虫之pandas基本安装与使用方法示例
2018/08/08 Python
python 3.6.2 安装配置方法图文教程
2018/09/18 Python
Python登录系统界面实现详解
2019/06/25 Python
django框架单表操作之增删改实例分析
2019/12/16 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
2020/11/06 Python
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
蓝颜请假条
2014/04/11 职场文书
党的群众路线教育实践活动总结报告
2014/04/28 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
局火灾防控工作方案
2014/05/25 职场文书
党员违纪检讨书怎么写
2014/11/01 职场文书