记一次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实现抓取城市的PM2.5浓度和排名
Mar 19 Python
python3.5实现socket通讯示例(TCP)
Feb 07 Python
python实现给微信公众号发送消息的方法
Jun 30 Python
Python数据分析库pandas基本操作方法
Apr 08 Python
python求解数组中两个字符串的最小距离
Sep 27 Python
python3.6数独问题的解决
Jan 21 Python
利用ImageAI库只需几行python代码实现目标检测
Aug 09 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
Aug 31 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
Jan 09 Python
pytorch实现特殊的Module--Sqeuential三种写法
Jan 15 Python
基于python实现简单C/S模式代码实例
Sep 14 Python
Elasticsearch 数据类型及管理
Apr 19 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里面的抽象类
2010/01/28 PHP
PHP防止post重复提交数据的简单例子
2014/06/07 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
2016/09/22 PHP
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
怎么清空javascript数组
2013/05/11 Javascript
jQuery 删除或是清空某个HTML元素示例
2014/08/04 Javascript
javascript模拟命名空间
2015/04/17 Javascript
jQuery弹出层插件Lightbox_me使用指南
2015/04/21 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
2015/08/27 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
JS正则匹配中文的方法示例
2017/01/06 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
JSON创建键值对(key是中文或者数字)方式详解
2017/08/24 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
vue-cli3使用mock数据的方法分析
2020/03/16 Javascript
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
解决vue打包 npm run build-test突然不动了的问题
2020/11/13 Javascript
[01:05:12]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS CIS-GAME
2014/05/21 DOTA
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
python排序方法实例分析
2015/04/30 Python
Django 跨域请求处理的示例代码
2018/05/02 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
2020/02/18 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
Hoover胡佛官网:美国吸尘器和洗地机品牌
2019/01/09 全球购物
设置器与访问器的定义以及各自特点
2016/01/08 面试题
入党自我鉴定
2014/03/25 职场文书
租赁协议书范本
2014/04/22 职场文书
大学生实习鉴定评语
2014/04/25 职场文书
模特大赛策划方案
2014/05/28 职场文书
赔偿协议书怎么写
2015/01/28 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书