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实现红包裂变算法
Feb 16 Python
解析Python中的生成器及其与迭代器的差异
Jun 20 Python
python flask 多对多表查询功能
Jun 25 Python
python中virtualenvwrapper安装与使用
May 20 Python
python实现字符串中字符分类及个数统计
Sep 28 Python
Scrapy使用的基本流程与实例讲解
Oct 21 Python
python 利用pandas将arff文件转csv文件的方法
Feb 12 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
Python爬虫学习之获取指定网页源码
Jul 30 Python
python实现上传文件到linux指定目录的方法
Jan 03 Python
python批量修改xml属性的实现方式
Mar 05 Python
Python嵌入C/C++进行开发详解
Jun 09 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+mysqli事务控制实现银行转账实例
2015/01/29 PHP
PHP实现合并discuz用户
2015/08/05 PHP
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
jQuery去掉字符串起始和结尾的空格(多种方法实现)
2013/04/01 Javascript
浅析Node.js查找字符串功能
2014/09/03 Javascript
前端必备神器 Snap.svg 弹动效果
2014/11/10 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
jQuery侧边栏实现代码
2016/05/06 Javascript
JavaScript手机振动API
2016/06/11 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
javascript中的后退和刷新实现方法
2016/11/10 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
React-native桥接Android原生开发详解
2018/01/17 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
2020/10/27 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
2020/10/29 Javascript
[43:35]EG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
Python生成数字图片代码分享
2017/10/31 Python
对pandas中to_dict的用法详解
2018/06/05 Python
python 剪切移动文件的实现代码
2018/08/02 Python
python实现用类读取文件数据并计算矩形面积
2020/01/18 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
Python结合百度语音识别实现实时翻译软件的实现
2021/01/18 Python
美国亚洲时尚和美容产品的一站式网上商店:Stylevana
2019/09/05 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
劳资员岗位职责
2013/11/11 职场文书
农村婚庆司仪主持词
2014/03/15 职场文书
合作经营协议书
2014/04/17 职场文书
大学生求职信范文
2014/05/24 职场文书
全陪导游词开场白
2015/05/29 职场文书
MySQL数据库必备之条件查询语句
2021/10/15 MySQL