记一次pyinstaller打包pygame项目为exe的过程(带图片)


Posted in Python onMarch 02, 2020

一段简单的pygame代码,只在pygame界面背景绘制了一个背景图片

# -*- coding=utf-8 -*-
import sys
import pygame

pygame.init()
screen = pygame.display.set_mode((400,300))

bg_image = pygame.image.load('bg.jpeg')
bg_image = pygame.transform.scale(bg_image, (400, 300))

while True:
	for event in pygame.event.get():
		if event.type == pygame.QUIT:
			pygame.quit()
			sys.exit()

	screen.blit(bg_image, (0, 0))
	pygame.display.update()

目录下只有两个game.py和一个bg.jpeg图片

记一次pyinstaller打包pygame项目为exe的过程(带图片)

程序运行是正常的

记一次pyinstaller打包pygame项目为exe的过程(带图片)

现在进行pyinstaller打包,一般打包是执行pyinstaller -F -w game.py,执行后看到多了一个build文件夹、一个dist文件夹和一个game.spec文件

记一次pyinstaller打包pygame项目为exe的过程(带图片)

到dist目录下双击下game.exe,很不幸,会提示Failed to execute script pyi_rth_pkgres

记一次pyinstaller打包pygame项目为exe的过程(带图片)

这个问题主要是我这目录里没有虚拟环境,需要import的库找不到,现在增加一个-p参数添加python包的路径
pyinstaller -p C:\Users\xxx\AppData\Local\Programs\Python\Python37\Lib\site-packages -F -w game.py
打包后再次执行,发现错误

记一次pyinstaller打包pygame项目为exe的过程(带图片)

换了一个错误,但已经执行不成功,为了知道是什么错误,将打包命令改为
pyinstaller -p C:\Users\xxx\AppData\Local\Programs\Python\Python37\Lib\site-packages -F -c game.py
然后将exe拉进cmd窗口里执行

记一次pyinstaller打包pygame项目为exe的过程(带图片)

现在可以看到错误了,是说图片文件找不到,把图片拷到exe目录是不是就可以了呢?拷过来以后确实可以正常运行,那么有没有办法把exe一起打包到exe里面呢?
是可以的,要做下面两步

1.修改下代码,将图片路径的构造方式有相对路径变为构造绝对路径,因为在执行exe时资源文件会被解压到C:\Users\xxx\AppData\Local\Temp_MEI33282这样的一个名称随机的文件夹

# -*- coding=utf-8 -*-
import os, sys
import pygame

def resource_path(relative):
	if hasattr(sys, "_MEIPASS"):
		absolute_path = os.path.join(sys._MEIPASS, relative)
	else:
		absolute_path = os.path.join(relative)
	return absolute_path

pygame.init()
screen = pygame.display.set_mode((400,300))

bg_image = pygame.image.load(resource_path('bg.jpeg'))
bg_image = pygame.transform.scale(bg_image, (400, 300))

while True:
	for event in pygame.event.get():
		if event.type == pygame.QUIT:
			pygame.quit()
			sys.exit()

	screen.blit(bg_image, (0, 0))
	pygame.display.update()

2.打开前面生成的那个game.spec来编辑,只需要编辑下面EXE那部分,修改成

exe = EXE(pyz,
     a.scripts,
     a.binaries,
     a.zipfiles,
     a.datas,
     [('bg.jpeg','D:\\mycode\\bg.jpeg','DATA')],
     name='game',
     debug=False,
     bootloader_ignore_signals=False,
     strip=False,
     upx=True,
     upx_exclude=[],
     runtime_tmpdir=None,
     console=True )

在a.datas下方的数组里填上要打包的图片,如果是两个图片,那么写成

[('bg.jpeg','D:\\mycode\\bg.jpeg','DATA'),('bg2.jpeg','D:\\mycode\\bg2.jpeg','DATA')]

这样的格式

修改完文件后再次打包时需要注意,这次执行打包需要用pyinstaller game.spec这种指定spec文件的方式打包,再次运行打包后的exe终于发现现在可以正常运行了。但是现在还多一个控制台的黑窗没去掉,回到game.spec,把console=True这一行,改成console=Flase后再用pyinstaller game.spec打包就完美结束了。

到此这篇关于记一次pyinstaller打包pygame项目为exe的过程(带图片)的文章就介绍到这了,更多相关pyinstaller打包pygame为exe内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python使用代理抓取网站图片(多线程)
Mar 14 Python
python获得文件创建时间和修改时间的方法
Jun 30 Python
详解Python中contextlib上下文管理模块的用法
Jun 28 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
Nov 02 Python
Python批量合并有合并单元格的Excel文件详解
Apr 05 Python
PyQt5实现QLineEdit添加clicked信号的方法
Jun 25 Python
Django REST framework 如何实现内置访问频率控制
Jul 23 Python
pytorch加载自定义网络权重的实现
Jan 07 Python
pycharm快捷键汇总
Feb 14 Python
Python进行统计建模
Aug 10 Python
Python 测试框架unittest和pytest的优劣
Sep 26 Python
详解Python中的进程和线程
Jun 23 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
Mar 02 #Python
Python 调用有道翻译接口实现翻译
Mar 02 #Python
Python selenium抓取虎牙短视频代码实例
Mar 02 #Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 #Python
python mysql 字段与关键字冲突的解决方式
Mar 02 #Python
python3实现往mysql中插入datetime类型的数据
Mar 02 #Python
python3将变量写入SQL语句的实现方式
Mar 02 #Python
You might like
PHP获取数组中某元素的位置及array_keys函数应用
2013/01/29 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
使用js获取QueryString的方法小结
2010/02/28 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
2016/06/01 Javascript
Bootstrap被封装的弹层
2016/07/20 Javascript
js实现类bootstrap模态框动画
2017/02/07 Javascript
Vue-Router实现页面正在加载特效方法示例
2017/02/12 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
JS中的const命令你真懂它吗
2020/03/08 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
Python之os操作方法(详解)
2017/06/15 Python
Python实现自动上京东抢手机
2018/02/06 Python
Python selenium实现微博自动登录的示例代码
2018/05/16 Python
Python3如何判断三角形的类型
2020/04/12 Python
Python爬虫分析微博热搜关键词的实现代码
2021/02/22 Python
乌克兰巴士票购买网站:inBus
2021/03/12 全球购物
请写出char *p与"零值"比较的if语句
2014/09/24 面试题
销售经理工作职责
2014/02/03 职场文书
春风行动实施方案
2014/03/28 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
奥巴马英文演讲稿
2014/05/15 职场文书
开学典礼演讲稿
2014/05/23 职场文书
校园元旦活动总结
2014/07/09 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
2014年重阳节老干部座谈会上的讲话稿
2014/09/25 职场文书
财务整改报告范文
2014/11/05 职场文书
先进个人申报材料
2014/12/30 职场文书
幼儿园教师读书笔记
2015/06/29 职场文书
导游词之无锡华莱坞
2019/12/02 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers
sql查询语句之平均分、最高最低分及排序语句
2022/05/30 MySQL