记一次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使用cookielib库示例分享
Mar 03 Python
python基础教程之五种数据类型详解
Jan 12 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
Dec 15 Python
Python之批量创建文件的实例讲解
May 10 Python
python3使用QQ邮箱发送邮件
May 20 Python
Python3.5内置模块之random模块用法实例分析
Apr 26 Python
pygame实现打字游戏
Feb 19 Python
python实现七段数码管和倒计时效果
Nov 23 Python
Python使用py2neo操作图数据库neo4j的方法详解
Jan 13 Python
增大python字体的方法步骤
Jul 05 Python
pytorch 多分类问题,计算百分比操作
Jul 09 Python
详解Selenium 元素定位和WebDriver常用方法
Dec 04 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在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
php反射类ReflectionClass用法分析
2016/05/12 PHP
PHP类的特性实例分析
2016/09/28 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
javascript eval函数深入认识
2009/02/21 Javascript
GRID拖拽行的实例代码
2013/07/18 Javascript
通过js为元素添加多项样式,浏览器全兼容写法
2014/08/30 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
2017/07/24 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
JavaScript类的继承方法小结【组合继承分析】
2018/07/11 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
浅谈JavaScript闭包
2019/04/09 Javascript
js实现简单的日历显示效果函数示例
2019/11/25 Javascript
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
python实现m3u8格式转换为mp4视频格式
2018/02/28 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
Python学习笔记之图片人脸检测识别实例教程
2019/03/06 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
2019/05/18 Python
Python实现将元组中的元素作为参数传入函数的操作
2020/06/05 Python
深入浅析python 中的self和cls的区别
2020/06/20 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
2020/08/04 Python
加拿大花店:1800Flowers.ca
2016/11/16 全球购物
迪士尼法国在线商店:shopDisney FR
2020/12/03 全球购物
中国电子产品批发商/跨境电商/外贸网:Sunsky-online
2020/04/20 全球购物
Oracle的内存结构(Memory structures)
2015/06/10 面试题
自我评价是什么
2014/01/04 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书
介绍信的格式
2015/01/30 职场文书
2015年信访工作总结
2015/04/07 职场文书
收入证明怎么写
2015/06/12 职场文书
使用CSS实现小三角边框原理解析
2021/11/07 HTML / CSS