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的11道基本面试题
Apr 01 Python
使用XML库的方式,实现RPC通信的方法(推荐)
Jun 14 Python
Python之str操作方法(详解)
Jun 19 Python
Django如何实现内容缓存示例详解
Sep 24 Python
使用pycharm在本地开发并实时同步到服务器
Aug 02 Python
解决Python对齐文本字符串问题
Aug 28 Python
如何在mac环境中用python处理protobuf
Dec 25 Python
Pytorch中的VGG实现修改最后一层FC
Jan 15 Python
Django实现列表页商品数据返回教程
Apr 03 Python
python和php哪个更适合写爬虫
Jun 22 Python
在Tensorflow中实现leakyRelu操作详解(高效)
Jun 30 Python
Python使用UDP实现720p视频传输的操作
Apr 24 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中的string类型使用说明
2010/07/27 PHP
php高级编程-函数-郑阿奇
2011/07/04 PHP
PHP函数getenv简介和使用实例
2014/05/12 PHP
解密ThinkPHP3.1.2版本之模板继承
2014/06/19 PHP
Yii实现Command任务处理的方法详解
2016/07/14 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
jQuery去掉字符串起始和结尾的空格(多种方法实现)
2013/04/01 Javascript
jqeury-easyui-layout问题解决方法
2014/03/24 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
jQuery中的Deferred和promise 的区别
2016/04/03 Javascript
一个仿微博登陆邮箱提示框js开发案例
2016/07/28 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
Bootstrap 过渡效果Transition 模态框(Modal)
2017/03/17 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
脚手架vue-cli工程webpack的基本用法详解
2018/09/29 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
2018/12/03 Javascript
JavaScript ES6常用基础知识总结
2019/02/09 Javascript
webpack安装配置与常见使用过程详解(结合vue)
2020/06/01 Javascript
详解JavaScript 事件流
2020/09/02 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
基于Python 的进程管理工具supervisor使用指南
2016/09/18 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
代码实例讲解python3的编码问题
2019/07/08 Python
Django使用中间键实现csrf认证详解
2019/07/22 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
浅谈Python 递归算法指归
2019/08/22 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
中国领先的汽车保养服务平台:途虎养车
2019/10/18 全球购物
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
字符串str除首尾字符外的其他字符按升序排列
2013/03/08 面试题
推广普通话共筑中国梦演讲稿
2014/09/21 职场文书
中标通知书格式
2015/04/17 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
python 模块重载的五种方法
2021/04/24 Python
5个实用的JavaScript新特性
2022/06/16 Javascript