记一次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之深入变量和引用对象
Sep 24 Python
python将图片文件转换成base64编码的方法
Mar 14 Python
python实现带错误处理功能的远程文件读取方法
Apr 29 Python
Python读大数据txt
Mar 28 Python
python字符串中的单双引
Feb 16 Python
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
Jan 05 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 Python
使用sklearn之LabelEncoder将Label标准化的方法
Jul 11 Python
python实现简单的文字识别
Nov 27 Python
python3.7 sys模块的具体使用
Jul 22 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
Aug 26 Python
python入门之算法学习
Apr 22 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中的多态性[译]
2011/08/02 PHP
PHP内置的Math函数效率测试
2014/12/01 PHP
详解PHP的Yii框架的运行机制及其路由功能
2016/03/17 PHP
php实现图片以base64显示的方法
2016/10/13 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
Laravel 实现数据软删除功能
2019/08/21 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
[原创]来自ImageSee官方 JavaScript图片浏览器
2008/01/16 Javascript
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
jquery text()方法取标签中的文本
2014/07/25 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
2016/07/27 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
Bootstrap模态框(Modal)实现过渡效果
2017/03/17 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
2017/08/17 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
在elementui中Notification组件添加点击事件实例
2020/11/11 Javascript
python dict remove数组删除(del,pop)
2013/03/24 Python
Python解析网页源代码中的115网盘链接实例
2014/09/30 Python
Python 多线程实例详解
2017/03/25 Python
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
Python使用ctypes调用C/C++的方法
2019/01/29 Python
python实现诗歌游戏(类继承)
2019/02/26 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
Python argparse模块应用实例解析
2019/11/15 Python
Tensorflow实现多GPU并行方式
2020/02/03 Python
python下载的库包存放路径
2020/07/27 Python
python 基于pygame实现俄罗斯方块
2021/03/02 Python
Ralph Lauren拉夫·劳伦美国官网:带有浓郁美国气息的高品味时装品牌
2017/11/01 全球购物
幼儿教师自我鉴定
2013/11/02 职场文书
采购员的工作职责
2013/12/26 职场文书
最新党员思想汇报
2014/01/01 职场文书
竞聘书格式及范文
2014/03/31 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
大学生国家助学金感谢信
2015/01/23 职场文书