记一次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程序设计入门(4)模块和包
Jun 16 Python
django 在原有表格添加或删除字段的实例
May 27 Python
python爬取微信公众号文章
Aug 31 Python
Python实现的拉格朗日插值法示例
Jan 08 Python
使用python serial 获取所有的串口名称的实例
Jul 02 Python
Python箱型图绘制与特征值获取过程解析
Oct 22 Python
python实现局域网内实时通信代码
Dec 22 Python
Python+Django+MySQL实现基于Web版的增删改查的示例代码
May 13 Python
Pandas中两个dataframe的交集和差集的示例代码
Dec 13 Python
5分钟快速掌握Python定时任务框架的实现
Jan 26 Python
python通过新建环境安装tfx的问题
May 20 Python
LyScript实现绕过反调试保护的示例详解
Aug 14 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 iconv() : Detected an illegal character in input string
2010/12/05 PHP
深入php中var_dump方法的使用详解
2013/06/24 PHP
php模拟ping命令(php exec函数的使用方法)
2013/10/25 PHP
web server使用php生成web页面的三种方法总结
2013/10/28 PHP
PHP中require和include路径问题详解
2014/12/25 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
JavaScript 面向对象之命名空间
2010/05/04 Javascript
Mac/Windows下如何安装Node.js
2013/11/22 Javascript
javascript使用window.open提示“已经计划系统关机”的原因
2014/08/15 Javascript
jquery获得同源iframe内body下标签的值的方法
2014/09/25 Javascript
Bootstrap 布局组件(全)
2016/07/18 Javascript
通过BootStrap实现轮播图的实际应用
2016/09/26 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
Angularjs自定义指令实现分页插件(DEMO)
2017/09/16 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
2019/05/13 Javascript
jquery选择器和属性对象的操作实例分析
2020/01/10 jQuery
vue中英文切换实例代码
2020/01/21 Javascript
详解Webpack4多页应用打包方案
2020/07/16 Javascript
python解决Fedora解压zip时中文乱码的方法
2016/09/18 Python
python之PyMongo使用总结
2017/05/26 Python
python添加模块搜索路径方法
2017/09/11 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
Python实现检测文件MD5值的方法示例
2018/04/11 Python
python re库的正则表达式入门学习教程
2019/03/08 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
Python响应对象text属性乱码解决方案
2020/03/31 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
CSS3实现超酷的黑猫警长首页
2016/04/26 HTML / CSS
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
医院护士的求职信
2014/01/03 职场文书
2015年八一建军节演讲稿
2015/03/19 职场文书
乡镇保密工作承诺书
2015/05/04 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书
Golang: 内建容器的用法
2021/05/05 Golang