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进阶教程之动态类型详解
Aug 30 Python
python遍历类中所有成员的方法
Mar 18 Python
python实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
python中黄金分割法实现方法
May 06 Python
Python字符串和字典相关操作的实例详解
Sep 23 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
Oct 22 Python
Python shelve模块实现解析
Aug 28 Python
python lambda表达式(匿名函数)写法解析
Sep 16 Python
Python 爬取必应壁纸的实例讲解
Feb 24 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
Apr 27 Python
Python 如何实现文件自动去重
Jun 02 Python
Python+Appium自动化测试的实战
Jun 30 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 array_map array_multisort 高效处理多维数组排序
2009/06/11 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
在 Laravel 项目中使用 webpack-encore的方法
2019/07/21 PHP
js+数组实现网页上显示时间/星期几的实用方法
2013/01/18 Javascript
JS中 用户登录系统的解决办法
2013/04/15 Javascript
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
jquery获取radio值(单选组radio)
2014/10/16 Javascript
深入理解Javascript中的自执行匿名函数
2016/06/03 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
jQuery复制节点用法示例(clone方法)
2016/09/08 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
2017/06/17 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
探究react-native 源码的图片缓存问题
2017/08/24 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
2018/01/12 Javascript
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
[02:32]DOTA2英雄基础教程 祸乱之源
2013/12/23 DOTA
python super的使用方法及实例详解
2019/09/25 Python
Python实现手势识别
2020/10/21 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
2021/01/12 Python
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
Java模拟试题
2014/11/10 面试题
中青班党性分析材料
2014/02/16 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
优秀的导游求职信范文
2014/04/06 职场文书
创先争优公开承诺书
2014/08/30 职场文书
2015年高三教学工作总结
2015/07/21 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书
周一早安温馨问候祝福语!
2019/07/15 职场文书
Consul在linux环境的集群部署
2022/04/08 Servers
python如何读取和存储dict()与.json格式文件
2022/06/25 Python
uniapp引入支付宝原生扫码插件步骤详解
2022/07/23 Javascript