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 26 Python
使用Python生成url短链接的方法
May 04 Python
深入理解Python3中的http.client模块
Mar 29 Python
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 Python
Python3实现的Mysql数据库操作封装类
Jun 06 Python
在python中使用with打开多个文件的方法
Jan 07 Python
python 获取当前目录下的文件目录和文件名实例代码详解
Mar 10 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
Jun 01 Python
python模块如何查看
Jun 16 Python
python类共享变量操作
Sep 03 Python
python 爬取小说并下载的示例
Dec 07 Python
Python中np.random.randint()参数详解及用法实例
Sep 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中simplexml_load_string函数使用说明
2011/01/01 PHP
Php无限级栏目分类读取的实现代码
2014/02/19 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
2014/05/08 PHP
php数组随机排序实现方法
2015/06/13 PHP
php生成二维码
2015/08/10 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
Laravel中错误与异常处理的用法示例
2018/09/16 PHP
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
原生 JS Ajax,GET和POST 请求实例代码
2016/06/08 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
2016/09/01 Javascript
学习Node.js模块机制
2016/10/17 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
2018/07/05 Javascript
[01:20]DOTA2更新全新英雄 天涯墨客现已加入游戏
2018/08/25 DOTA
python并发2之使用asyncio处理并发
2017/12/21 Python
python 将有序数组转换为二叉树的方法
2019/03/26 Python
使用APScheduler3.0.1 实现定时任务的方法
2019/07/22 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
Python字典生成式、集合生成式、生成器用法实例分析
2020/01/07 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
在Python中实现字典反转案例
2020/12/05 Python
你应该知道的30个css选择器
2014/03/19 HTML / CSS
加拿大休闲和工业服装和鞋类零售商:L’Équipeur
2018/01/12 全球购物
中软国际Java程序员笔试题
2014/07/19 面试题
大学毕业生简单自荐信
2013/11/05 职场文书
劳资人员岗位职责
2013/12/19 职场文书
会计辞职信范文
2014/01/15 职场文书
银行员工辞职信范文
2014/01/20 职场文书
一般党员对照检查材料
2014/09/24 职场文书
酒店员工辞职信范文
2015/02/28 职场文书
学校隐患排查制度
2015/08/05 职场文书
婚前协议书怎么写,才具有法律效力呢 ?
2019/06/28 职场文书
React中的Context应用场景分析
2021/06/11 Javascript