记一次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
python实现可将字符转换成大写的tcp服务器实例
Apr 29 Python
简单的连接MySQL与Python的Bottle框架的方法
Apr 30 Python
在Linux系统上部署Apache+Python+Django+MySQL环境
Dec 24 Python
Python3基于sax解析xml操作示例
May 22 Python
Django框架实现的简单分页功能示例
Dec 04 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
Feb 21 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
Jan 03 Python
Tensorflow轻松实现XOR运算的方式
Feb 03 Python
Python的历史与优缺点整理
May 26 Python
Pymysql实现往表中插入数据过程解析
Jun 02 Python
使用Python pip怎么升级pip
Aug 11 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
phpMyAdmin 安装配置方法和问题解决
2009/06/08 PHP
PHP易混淆函数的区别及用法汇总
2014/11/22 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
JS动画效果代码3
2008/04/03 Javascript
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
js判断鼠标同时离开两个div的思路及代码
2013/05/31 Javascript
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
2015/04/30 Javascript
JS判断页面是否出现滚动条的方法
2015/07/17 Javascript
AngularJS 指令详细介绍
2016/07/27 Javascript
Three.js学习之网格
2016/08/10 Javascript
浅谈js原生拖放
2016/11/21 Javascript
浅谈angularjs依赖服务注入写法的注意点
2017/04/24 Javascript
JavaScript设计模式之单例模式详解
2017/06/09 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
Vue.js 动态为img的src赋值方法
2018/03/14 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
2019/01/23 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
2019/08/27 jQuery
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
python实现倒计时的示例
2014/02/14 Python
Python中的数学运算操作符使用进阶
2016/06/20 Python
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
解决安装tensorflow遇到无法卸载numpy 1.8.0rc1的问题
2018/06/13 Python
Python连接Mssql基础教程之Python库pymssql
2018/09/16 Python
实例讲解Python3中abs()函数
2019/02/19 Python
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
医院护士的求职信范文
2013/12/26 职场文书
课外小组活动总结
2014/08/27 职场文书
小学六一儿童节活动方案
2014/08/27 职场文书
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android