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 相关文章推荐
Python3实现从文件中读取指定行的方法
May 22 Python
深入解析Python中的lambda表达式的用法
Aug 28 Python
json跨域调用python的方法详解
Jan 11 Python
使用XML库的方式,实现RPC通信的方法(推荐)
Jun 14 Python
详解python函数传参是传值还是传引用
Jan 16 Python
对Python多线程读写文件加锁的实例详解
Jan 14 Python
python远程邮件控制电脑升级版
May 23 Python
Python使用APScheduler实现定时任务过程解析
Sep 11 Python
Python通过VGG16模型实现图像风格转换操作详解
Jan 16 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
Feb 18 Python
Python切片列表字符串如何实现切换
Aug 06 Python
利用Opencv实现图片的油画特效实例
Feb 28 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-fpm的两种进程管理模式详解
2013/06/03 PHP
成为好程序员必须避免的5个坏习惯
2014/07/04 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
js判断变量是否空值的代码
2008/10/26 Javascript
JS面向对象编程 for Cookie
2010/09/19 Javascript
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
jQuery $.get 的妙用 访问本地文本文件
2012/07/12 Javascript
js动态添加表格数据使用insertRow和insertCell实现
2014/05/22 Javascript
node.js中的fs.fchown方法使用说明
2014/12/16 Javascript
jQuery实现的经典滑动门效果
2015/09/22 Javascript
bootstrap快速制作后台界面
2016/12/05 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
JavaScript实现网页头部进度条刷新
2017/04/16 Javascript
Bootstrap Table使用整理(四)之工具栏
2017/06/09 Javascript
Angular实现的table表格排序功能完整示例
2017/12/22 Javascript
详解nodeJs文件系统(fs)与流(stream)
2018/01/24 NodeJs
Vue.js组件使用props传递数据的方法
2019/10/19 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
JavaScript中Object、map、weakmap的区别分析
2020/12/15 Javascript
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
python实现ping的方法
2015/07/06 Python
实例解析Python设计模式编程之桥接模式的运用
2016/03/02 Python
Python字符串格式化输出方法分析
2016/04/13 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
在python image 中安装中文字体的实现方法
2019/08/22 Python
Python socket 套接字实现通信详解
2019/08/27 Python
浅谈python 中的 type(), dtype(), astype()的区别
2020/04/09 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
python线程优先级队列知识点总结
2021/02/28 Python
极度干燥澳大利亚官方网站:Superdry澳大利亚
2019/03/28 全球购物
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
医院见习报告范文
2014/11/03 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书
MySQL查询学习之基础查询操作
2021/05/08 MySQL
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS
Java框架入门之简单介绍SpringBoot框架
2021/06/18 Java/Android