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函数编程的一些特性
Apr 13 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
Jun 11 Python
对Python中list的倒序索引和切片实例讲解
Nov 15 Python
深入浅析Python 中 is 语法带来的误解
May 07 Python
Django实现跨域请求过程详解
Jul 25 Python
python 实现return返回多个值
Nov 19 Python
python 协程 gevent原理与用法分析
Nov 22 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
Dec 04 Python
python使用pymongo与MongoDB基本交互操作示例
Apr 09 Python
sklearn的predict_proba使用说明
Jun 28 Python
Python+OpenCV图像处理——图像二值化的实现
Oct 24 Python
python中__slots__节约内存的具体做法
Jul 04 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
php 远程关机操作的代码
2008/12/05 PHP
php读取html并截取字符串的简单代码
2009/11/30 PHP
php接口与接口引用的深入解析
2013/08/09 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
2013/12/22 PHP
zf框架的Filter过滤器使用示例
2014/03/13 PHP
JS 字符串连接[性能比较]
2009/05/10 Javascript
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
2011/11/21 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
2016/11/09 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
2017/03/21 Javascript
微信小程序 跳转方式总结
2017/04/20 Javascript
为你的微信小程序体积瘦身详解
2017/05/20 Javascript
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
ES6 Proxy实现Vue的变化检测问题
2019/06/11 Javascript
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
jQuery实现雪花飘落效果
2020/08/02 jQuery
Vue使用Proxy代理后仍无法生效的解决
2020/11/13 Javascript
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
社会实践心得体会
2014/01/03 职场文书
个人评价范文分享
2014/01/11 职场文书
《云房子》教学反思
2014/04/20 职场文书
工作说明书范文
2014/05/07 职场文书
舞蹈教育学专业自荐信
2014/06/15 职场文书
2014年物流工作总结
2014/11/25 职场文书
个人总结与自我评价
2015/02/14 职场文书
2015年个人审计工作总结
2015/04/07 职场文书
小学六年级毕业感言
2015/07/30 职场文书
压缩Redis里的字符串大对象操作
2021/06/23 Redis