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语言的面相对象编程方式初步学习
Mar 12 Python
Python使用正则表达式抓取网页图片的方法示例
Apr 21 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
Jul 12 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
Feb 07 Python
PyQt5每天必学之进度条效果
Apr 19 Python
Django框架安装方法图文详解
Nov 04 Python
Python3 实现减少可调用对象的参数个数
Dec 20 Python
Python3实现打印任意宽度的菱形代码
Apr 12 Python
详解Python IO口多路复用
Jun 17 Python
如何解决pycharm调试报错的问题
Aug 06 Python
Python容器类型公共方法总结
Aug 19 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
Nov 20 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
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
jQuery文本框得到与失去焦点动态改变样式效果
2016/09/08 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
vuejs如何配置less
2017/04/25 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
详解vue-router 路由元信息
2017/09/13 Javascript
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
2018/01/18 jQuery
详解easyui基于 layui.laydate日期扩展组件
2018/07/18 Javascript
Vue.js 中的 v-show 指令及用法详解
2018/11/19 Javascript
微信小程序实现点击图片旋转180度并且弹出下拉列表
2018/11/27 Javascript
express+vue+mongodb+session 实现注册登录功能
2018/12/06 Javascript
node.js使用fs读取文件出错的解决方案
2019/10/23 Javascript
react结合bootstrap实现评论功能
2020/05/30 Javascript
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
python 实现网上商城,转账,存取款等功能的信用卡系统
2016/07/15 Python
python之Character string(实例讲解)
2017/09/25 Python
python读写LMDB文件的方法
2018/07/02 Python
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
python 对字典按照value进行排序的方法
2019/05/09 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
2020/08/04 Python
详解python metaclass(元类)
2020/08/13 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
2020/12/05 Python
如何通过安装HomeBrew来安装Python3
2020/12/23 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
聊聊python在linux下与windows下导入模块的区别说明
2021/03/03 Python
如何利用input事件来监听移动端的输入
2016/04/15 HTML / CSS
比利时网上药店: Drogisterij.net
2017/03/17 全球购物
Superdry极度干燥美国官网:英国制造的服装品牌
2018/11/13 全球购物
中海讯通笔试题
2015/09/15 面试题
留学推荐信写作指南
2014/01/25 职场文书
活动总结书
2014/05/08 职场文书
公共场所禁烟倡议书
2014/08/30 职场文书
课程设计的心得体会
2014/09/03 职场文书
JS创建或填充任意长度数组的小技巧汇总
2021/10/24 Javascript
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA