记一次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数据结构之二叉树的统计与转换实例
Apr 29 Python
利用Python的装饰器解决Bottle框架中用户验证问题
Apr 24 Python
使用python实现knn算法
Dec 20 Python
使用python 爬虫抓站的一些技巧总结
Jan 10 Python
Python 通配符删除文件的实例
Apr 24 Python
pandas 将list切分后存入DataFrame中的实例
Jul 03 Python
python自定义函数实现最大值的输出方法
Jul 09 Python
python实现复制大量文件功能
Aug 31 Python
Python求解正态分布置信区间教程
Nov 20 Python
Python中Yield的基本用法
Oct 18 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
Mar 03 Python
Python中np.random.randint()参数详解及用法实例
Sep 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
yii使用bootstrap分页样式的实例
2017/01/17 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
csdn 博客的css样式 v3
2009/02/24 Javascript
jQuery 判断页面元素是否存在的代码
2009/08/14 Javascript
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
2010/06/29 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
三种方式获取XMLHttpRequest对象
2014/04/21 Javascript
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
2014/11/02 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
js实现图片360度旋转
2017/01/22 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
2019/04/14 Javascript
微信小程序如何实现全局重新加载
2019/06/05 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
[03:03]2014DOTA2西雅图国际邀请赛 Alliance战队巡礼
2014/07/07 DOTA
[01:07:57]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第二场 1月19日
2021/03/11 DOTA
tensorflow saver 保存和恢复指定 tensor的实例讲解
2018/07/26 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
2018/09/17 Python
对python调用RPC接口的实例详解
2019/01/03 Python
Python代码实现http/https代理服务器的脚本
2019/08/12 Python
python实现图片压缩代码实例
2019/08/12 Python
Python3监控疫情的完整代码
2020/02/20 Python
python中entry用法讲解
2020/12/04 Python
如何用H5实现一个触屏版的轮播器的实例
2017/01/09 HTML / CSS
介绍一下grep命令的使用
2015/06/12 面试题
2014厂务公开实施方案
2014/02/17 职场文书
体育比赛口号
2014/06/09 职场文书
车间统计员岗位职责
2015/04/14 职场文书
Python基于百度API识别并提取图片中文字
2021/06/27 Python
Spring 使用注解开发
2022/05/20 Java/Android