记一次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 16 Python
Python内置函数dir详解
Apr 14 Python
Python 结巴分词实现关键词抽取分析
Oct 21 Python
Windows 7下Python Web环境搭建图文教程
Mar 20 Python
使用matplotlib画散点图的方法
May 25 Python
Flask模拟实现CSRF攻击的方法
Jul 24 Python
Python实现分段线性插值
Dec 17 Python
如何利用Python模拟GitHub登录详解
Jul 15 Python
Python统计分析模块statistics用法示例
Sep 06 Python
logging level级别介绍
Feb 21 Python
Keras官方中文文档:性能评估Metrices详解
Jun 15 Python
Django静态文件加载失败解决方案
Aug 26 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之生成GIF动画的实现方法
2013/06/07 PHP
php连接函数implode与分割explode的深入解析
2013/06/26 PHP
PHP按行读取、处理较大CSV文件的代码实例
2014/04/09 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
2015/10/15 PHP
thinkphp实现163、QQ邮箱收发邮件的方法
2015/12/18 PHP
JS无限树状列表实现代码
2011/01/11 Javascript
JavaScript自动设置IFrame高度的小例子
2013/06/08 Javascript
JQuery的ON()方法支持的所有事件罗列
2015/02/28 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
js实现Form栏显示全格式时间时钟效果代码
2015/08/19 Javascript
JS获取CSS样式(style/getComputedStyle/currentStyle)
2016/01/19 Javascript
Vue.js每天必学之方法与事件处理器
2016/09/06 Javascript
JQuery和PHP结合实现动态进度条上传显示
2016/11/23 Javascript
JavaScript实现自定义媒体播放器方法介绍
2017/01/03 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
2017/03/13 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
js基础之事件捕获与冒泡原理
2019/10/09 Javascript
Python中的Matplotlib模块入门教程
2015/04/15 Python
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
使用python绘制温度变化雷达图
2019/10/18 Python
浅析python redis的连接及相关操作
2019/11/07 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
python调用API接口实现登陆短信验证
2020/05/10 Python
大学生毕业自荐信
2013/10/10 职场文书
企业项目策划书
2014/01/11 职场文书
爷爷追悼会答谢词
2014/01/24 职场文书
元旦晚会邀请函
2014/02/01 职场文书
升旗仪式主持词
2014/03/19 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
2015毕业生实习期工作总结
2015/04/09 职场文书
2016年学生会感恩节活动总结
2016/04/01 职场文书
Python还能这么玩之用Python修改了班花的开机密码
2021/06/04 Python
Python MNIST手写体识别详解与试练
2021/11/07 Python
灵能百分百第三季什么时候来?
2022/03/15 日漫