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 相关文章推荐
linux 下实现python多版本安装实践
Nov 18 Python
Python判断操作系统类型代码分享
Nov 22 Python
Python中join和split用法实例
Apr 14 Python
python实现验证码识别功能
Jun 07 Python
python实现两个dict合并与计算操作示例
Jul 01 Python
Python使用lambda表达式对字典排序操作示例
Jul 25 Python
使用python去除图片白色像素的实例
Dec 12 Python
python 类之间的参数传递方式
Dec 20 Python
python 等差数列末项计算方式
May 03 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
Mar 04 Python
python numpy中setdiff1d的用法说明
Apr 22 Python
python 详解turtle画爱心代码
Feb 15 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中文件缓存转内存缓存的方法
2011/12/06 PHP
PHP数据库调用类调用实例(详细注释)
2012/07/12 PHP
PHP变量内存分配问题记录整理
2013/11/27 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
JavaScript 事件对象的实现
2009/07/13 Javascript
js中eval()函数和trim()去掉字符串左右空格应用
2013/02/02 Javascript
jquery获取tr中控件值并操作tr实现思路
2013/03/27 Javascript
jquery常用特效方法使用示例
2014/04/25 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
javascript制作的简单注册模块表单验证
2015/04/13 Javascript
JS实现左右拖动改变内容显示区域大小的方法
2015/10/13 Javascript
跟我学习javascript的prototype原型和原型链
2015/11/18 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
2015/12/16 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
浅谈Nodejs中的作用域问题
2016/12/26 NodeJs
Vue开发过程中遇到的疑惑知识点总结
2017/01/20 Javascript
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
jQuery实现手势解锁密码特效
2017/08/14 jQuery
vue常用高阶函数及综合实例
2021/02/25 Vue.js
[40:19]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.18
2020/12/19 DOTA
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
Python中处理时间的几种方法小结
2015/04/09 Python
python实现的文件同步服务器实例
2015/06/02 Python
基于numpy中数组元素的切片复制方法
2018/11/15 Python
利用Python实现原创工具的Logo与Help
2018/12/03 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
2020/04/14 Python
学python爬虫能做什么
2020/07/29 Python
python 实现批量图片识别并翻译
2020/11/02 Python
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
毕业生欢送会主持词
2014/03/31 职场文书
劳动竞赛活动总结
2014/05/05 职场文书
十佳中学生事迹材料
2014/06/02 职场文书
公务员学习习总书记“三严三实”思想汇报
2014/09/19 职场文书
教师岗位职责
2015/02/03 职场文书
2015年药房工作总结
2015/04/25 职场文书