记一次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爬虫:通过关键字爬取百度图片
Feb 17 Python
Python 40行代码实现人脸识别功能
Apr 02 Python
flask使用session保存登录状态及拦截未登录请求代码
Jan 19 Python
使用python实现链表操作
Jan 26 Python
python如何读写csv数据
Mar 21 Python
python 列表推导式使用详解
Aug 29 Python
python使用sklearn实现决策树的方法示例
Sep 12 Python
Windows平台Python编程必会模块之pywin32介绍
Oct 01 Python
python双向链表原理与实现方法详解
Dec 03 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
Dec 27 Python
python无序链表删除重复项的方法
Jan 17 Python
python pandas移动窗口函数rolling的用法
Feb 29 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
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
onpropertypchange
2006/07/01 Javascript
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
js验证身份证号有效性并提示对应信息
2015/10/19 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
vue中使用protobuf的过程记录
2018/10/26 Javascript
vue的keep-alive用法技巧
2019/08/15 Javascript
node解析修改nginx配置文件操作实例分析
2019/11/06 Javascript
JavaScript简易计算器制作
2020/01/17 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
微信小程序使用前置摄像头拍照
2020/10/22 Javascript
一个计算身份证号码校验位的Python小程序
2014/08/15 Python
python线程池threadpool实现篇
2018/04/27 Python
Python实现的tcp端口检测操作示例
2018/07/24 Python
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
python调用c++传递数组的实例
2019/02/13 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
python使用minimax算法实现五子棋
2019/07/29 Python
PyQt5实现简单的计算器
2020/05/30 Python
简单介绍Object类的功能、常用方法
2013/10/02 面试题
最新的大学生找工作自我评价
2013/09/29 职场文书
心理健康心得体会
2014/01/02 职场文书
吃空饷专项治理工作实施方案
2014/03/04 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
文秘专业应届生求职信
2014/05/26 职场文书
国庆宣传标语
2014/06/30 职场文书
酒店爱岗敬业演讲稿
2014/09/02 职场文书
幼儿园教师师德表现自我评价
2015/03/05 职场文书
简历自我评价模板
2015/03/11 职场文书
公司行政管理制度范本
2015/08/05 职场文书
分家协议书范本
2016/03/22 职场文书
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python
Redis过期数据是否会被立马删除
2022/07/23 Redis