记一次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 返回汉字的汉语拼音
Feb 27 Python
用python实现的可以拷贝或剪切一个文件列表中的所有文件
Apr 30 Python
python使用in操作符时元组和数组的区别分析
May 19 Python
Python使用matplotlib绘制随机漫步图
Aug 27 Python
详解python中递归函数
Apr 16 Python
详解Python对JSON中的特殊类型进行Encoder
Jul 15 Python
详解Python3迁移接口变化采坑记
Oct 11 Python
Python参数传递实现过程及原理详解
May 14 Python
在keras中实现查看其训练loss值
Jun 16 Python
MAC平台基于Python Appium环境搭建过程图解
Aug 13 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
Nov 28 Python
python中的装饰器该如何使用
Jun 18 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提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
php递归方法实现无限分类实例代码
2014/02/28 PHP
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
原创javascript小游戏实现代码
2010/08/19 Javascript
js的写法基础分析
2011/01/17 Javascript
关于innerHTML后丢失动态绑定的EVENT问题解决方法
2013/05/19 Javascript
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
jQuery实现右键菜单、遮罩等效果代码
2016/09/27 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
2017/04/19 Javascript
详解Vue使用命令行搭建单页面应用
2017/05/24 Javascript
微信小程序 数据绑定及运算的简单实例
2017/09/20 Javascript
JS排序算法之希尔排序与快速排序实现方法
2017/12/12 Javascript
express+mockjs实现模拟后台数据发送功能
2018/01/07 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
2018/03/05 Javascript
JavaScript中this用法学习笔记
2019/03/17 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
vue动态循环出的多个select出现过的变为disabled(实例代码)
2019/11/10 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
python和flask中返回JSON数据的方法
2018/03/26 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
2019/02/08 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
2019/03/01 Python
Python 删除List元素的三种方法remove、pop、del
2020/11/16 Python
Laravel中Kafka的使用详解
2021/03/24 PHP
2014年社会实践活动总结范文
2014/04/29 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
大学生村官入党自传
2015/06/26 职场文书
如何写新闻稿
2015/07/18 职场文书
新闻报道稿范文
2015/07/23 职场文书
k8s部署redis cluster集群的实现
2021/06/24 Redis
PHP中多字节字符串操作实例详解
2021/08/23 PHP