记一次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中os和shutil模块实用方法集锦
May 13 Python
在主机商的共享服务器上部署Django站点的方法
Jul 22 Python
python分治法求二维数组局部峰值方法
Apr 03 Python
python3 kmp 字符串匹配的方法
Jul 07 Python
Python3.5文件修改操作实例分析
May 01 Python
Pycharm简单使用教程(入门小结)
Jul 04 Python
numpy中的meshgrid函数的使用
Jul 31 Python
基于Python实现扑克牌面试题
Dec 11 Python
基于python 等频分箱qcut问题的解决
Mar 03 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
Apr 08 Python
jupyter修改文件名方式(TensorFlow)
Apr 21 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
Aug 03 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之第三天
2006/10/09 PHP
PHP 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
php生成略缩图代码
2012/07/16 PHP
php画图实例
2014/11/05 PHP
ThinkPHP中order()使用方法详解
2016/04/19 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
使用Firebug对js进行断点调试的图文方法
2011/04/02 Javascript
关于锚点跳转及jQuery下相关操作与插件
2012/10/01 Javascript
浅谈时钟的生成(js手写简洁代码)
2016/08/20 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
JavaScript中正则表达式判断匹配规则及常用方法
2017/08/03 Javascript
React Native仿美团下拉菜单的实例代码
2017/08/08 Javascript
js字符限制(字符截取) 一个中文汉字算两个字符
2017/09/12 Javascript
基于复选框demo(分享)
2017/09/27 Javascript
JS中Attr的用法详解
2017/10/09 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
layui问题之自动滚动二级iframe页面到指定位置的方法
2019/09/18 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
vue实现购物车案例
2020/05/30 Javascript
vue实现从外部修改组件内部的变量的值
2020/07/30 Javascript
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
Python构建XML树结构的方法示例
2017/06/30 Python
Python3实现发送QQ邮件功能(html)
2017/12/15 Python
PyCharm设置每行最大长度限制的方法
2019/01/16 Python
彻底理解Python中的yield关键字
2019/04/01 Python
Python3.6中Twisted模块安装的问题与解决
2019/04/15 Python
Django model select的多种用法详解
2019/07/16 Python
利用matplotlib为图片上添加触发事件进行交互
2020/04/23 Python
爬虫代理的cookie如何生成运行
2020/09/22 Python
毕业晚会主持词
2014/03/24 职场文书
个人培训自我鉴定
2014/03/28 职场文书
婚庆公司计划书
2014/09/15 职场文书
上班时间打瞌睡检讨书
2014/09/26 职场文书
工厂标语大全
2014/10/06 职场文书
Redis 持久化 RDB 与 AOF的执行过程
2021/11/07 Redis