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.x对JSON的一些操作示例
Sep 01 Python
python 识别图片中的文字信息方法
May 10 Python
python实现反转部分单向链表
Sep 27 Python
python opencv判断图像是否为空的实例
Jan 26 Python
对Python3使运行暂停的方法详解
Feb 18 Python
Python字符串的一些操作方法总结
Jun 10 Python
python读取并写入mat文件的方法
Jul 12 Python
django 通过URL访问上传的文件方法
Jul 28 Python
Django中自定义查询对象的具体使用
Oct 13 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
Nov 16 Python
PyTorch学习:动态图和静态图的例子
Jan 06 Python
浅谈Python数学建模之线性规划
Jun 23 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环境搭建最新方法
2006/09/05 PHP
mysql 搜索之简单应用
2007/04/27 PHP
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
php判断是否为ajax请求的方法
2016/11/29 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
js中document.getElementByid、document.all和document.layers区分介绍
2011/12/08 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
2014/01/16 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
JavaScript脚本语言是什么_动力节点Java学院整理
2017/06/26 Javascript
JS组件系列之Gojs组件 前端图形化插件之利器
2017/11/29 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
2019/05/16 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
用Python创建声明性迷你语言的教程
2015/04/13 Python
快速入手Python字符编码
2016/08/03 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
Python实现哲学家就餐问题实例代码
2020/11/09 Python
解决img标签上下出现间隙的方法
2016/12/14 HTML / CSS
预订奥兰多和佛罗里达州公园门票:FloridaTix
2018/01/03 全球购物
《草原》教学反思
2014/02/15 职场文书
怀念母亲教学反思
2014/04/28 职场文书
清明节网上祭英烈活动总结
2014/04/30 职场文书
学校班班通实施方案
2014/06/11 职场文书
汽车机电维修工求职信
2014/09/30 职场文书
毕业横幅标语
2014/10/08 职场文书
小学教师2014年度工作总结
2014/12/03 职场文书
朋友聚会开场白
2015/06/01 职场文书
幼儿园秋季开学通知
2015/07/16 职场文书
幼儿园小朋友毕业感言
2015/07/30 职场文书
redis配置文件中常用配置详解
2021/04/14 Redis
python实现调用摄像头并拍照发邮箱
2021/04/27 Python