使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法


Posted in Python onSeptember 06, 2019

下面看下通过Pyinstaller打包Pygame库写的小游戏程序出现的问题解决方法

# -基于Python的Pygame库的GUI游戏

游戏内容是通过飞船发射子弹来射击外星人
空格键为开火,左右方向键移动,并设立了
不同关卡。

使用说明:

开发环境,游戏直接运行alien_invasion.exe即可,也可在具有Python3环境下运行alien_invasion.py

练习环境:

Python:3.5.4 64位
pyinstall:3.3.1
pyinstall使用:
pyinstaller -F demo.py
参数  含义
-F  指定打包后只生成一个exe格式的文件
-D  ?onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)
-c  ?console, ?nowindowed 使用控制台,无界面(默认选项)
-w  ?windowed, ?noconsole 使用窗口,无控制台
-p  添加搜索路径,让其找到对应的库。
-i  改变生成程序的icon图标

打包注意事项:

1.打包有2种方式:

  •     第一种是使用'-F'打包成单一的可执行文件,如alien_invasion.exe,此项目需要将
  •       images文件夹放置在与其同一目录下;
  •     第二种是默认使用'-D'方式,(但是我打包完成后无法运行,打包时经常出现“hidden import “pygame._view”not found”)

2.打包的文件与《Python编程:从入门到实践》练习的项目文件有所差异,具体为
   button.py与scoreboard.py中的字体做了改动,由
        'pygame.font.SysFont(None, 48)'=>'pygame.font.SysFont('arial', 36)'

3.使用pyinstaller打包时,不会自动包含图片文件,所以最简单的方式是打包后将图片放在运行程序的
  相应路径下。

!!!打包完毕后一定要讲你的素材images放在exe目录里面,以便exe文件能够链接到你的素材。

PS:指定dist生成目录路径(而不是命令行当前目录)

pyinstaller -F E:/*/*/*.py --distpath=E:*/*/*/dist

接着介绍下使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件的方法。

一、安装Pyinstaller

环境:python3.6、window10

注意事项:

  • python64位版本打包的exe,只能在64位操作系统使用
  • 打包文件夹和文件的名称不能用中文
  • pygame打包是里面的字体要改成"arial"格式。 pygame.font.SysFont("宋体", 32) 32)  换成 pygame.font.SysFont('arial',32)

1、直接安装

pip命令安装:pip install Pyinstaller

安装成功后会提示如下图所示

使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法

2、Anaconda环境下安装

如果是在Anaconda环境下直接打包,可能会将其中大部分扩展都打包进去了,造成打包后的exe文件过大,为此有以下解决方案(如果未出现此问题的同学请跳过)。

  • 建立虚拟环境 :pipenv install
  • 进入虚拟环境:pipenv shell
  • 安装所需模块 pip install pygame
  • 打包的模块也要安装 pip install pyinstaller

本人在C:/Users/EDZ/目录中新建Pyinstaller文件,首先进入目录,建立虚拟环境,进入虚拟环境,最后安装程序所需的安装模块以及pyinstaller。具体过程如图所示:

使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法

使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法

二、使用Pyinstaller打包生成exe文件

将要打包的py文件放入所创建的C:\Users\EDZ\Pyinstaller目录中,将自定义程序图标ico文件,也一同放进程序所在目录程序。

使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法

使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法

介绍一下 Pyinstaller 常用的参数用法:

  • -F: 表示生成单个可执行文件
  • -D:表示打包多个文件,在dist中生成很多依赖文件,
  • -w:指定生成 GUI 软件,表示去掉控制台窗口
  • -i <Icon File>: 指定打包后可执行文件的图标

命令:pyinstaller -F -w -i snaker.ico retro_snaker.py

稍微等待后,如果成功则会提示successfully,如图所示:

使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法

三、运行生成的exe文件

打包完成后,exe程序将会产生在打包目录的dist文件中。

如图所示:

使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法

使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法

那么我们就可以打开并运行你所打包的exe文件了

使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法

四、exe文件运行中的问题 

缺少MSVisualC++ 2015动态库

打开程序,报错提示:无法定位程序输入点ucrtbase.terminate于动态链接库api-ms-win-crt-runtime-l1-1-0.dll上,如图所示:

使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法

 解决方案:安装:Visual C++ Redistributable for Visual Studio 2015

注:下载对应版本安装
微软官网:https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=48145

安装后重启下电脑

若还不行,尝试安装下这个补丁:KB2999226

微软官网:https://www.microsoft.com/en-us/download/details.aspx?id=49093

总结

以上所述是小编给大家介绍的使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python实现发送邮件功能代码
Dec 14 Python
Django如何配置mysql数据库
May 04 Python
python自动化报告的输出用例详解
May 30 Python
Python线性拟合实现函数与用法示例
Dec 13 Python
python+opencv实现阈值分割
Dec 26 Python
梅尔倒谱系数(MFCC)实现
Jun 19 Python
python基于paramiko将文件上传到服务器代码实现
Jul 08 Python
Django shell调试models输出的SQL语句方法
Aug 29 Python
Django模板之基本的 for 循环 和 List内容的显示方式
Mar 31 Python
python 5个顶级异步框架推荐
Sep 09 Python
Python SQLAlchemy库的使用方法
Oct 13 Python
详解python中的异常和文件读写
Jan 03 Python
python监控nginx端口和进程状态
Sep 06 #Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
Sep 06 #Python
修改 CentOS 6.x 上默认Python的方法
Sep 06 #Python
Python代理IP爬虫的新手使用教程
Sep 05 #Python
关于Python内存分配时的小秘密分享
Sep 05 #Python
python global关键字的用法详解
Sep 05 #Python
python requests证书问题解决
Sep 05 #Python
You might like
环境会对咖啡种植有什么影响
2021/03/03 咖啡文化
php学习之 认清变量的作用范围
2010/01/26 PHP
PHP生成UTF8文件的方法
2010/05/15 PHP
php表单敏感字符过滤类
2014/12/08 PHP
PHP访问Google Search API的方法
2015/03/05 PHP
thinkphp命名空间用法实例详解
2015/12/30 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
2017/02/05 PHP
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
AngularJS基础 ng-focus 指令简单示例
2016/08/01 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
JS监控关闭浏览器操作的实例详解
2017/09/12 Javascript
VUE2.0+Element-UI+Echarts封装的组件实例
2018/03/02 Javascript
vue+element的表格实现批量删除功能示例代码
2018/08/17 Javascript
[43:43]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第三场 11.29
2020/12/02 DOTA
Python中with及contextlib的用法详解
2017/06/08 Python
Python中文件的读取和写入操作
2018/04/27 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
Pytorch实现LSTM和GRU示例
2020/01/14 Python
Python填充任意颜色,不同算法时间差异分析说明
2020/05/16 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
2021/01/28 Python
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码
2018/03/02 HTML / CSS
解析浏览器的一些“滚动”行为鉴赏
2019/09/16 HTML / CSS
旅游管理实习自我鉴定
2013/09/29 职场文书
写给女生的道歉信
2014/01/14 职场文书
信用社员工先进事迹材料
2014/02/04 职场文书
承德避暑山庄导游词
2015/02/03 职场文书
超级礼物观后感
2015/06/15 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python
golang用type-switch判断interface的实际存储类型
2022/04/14 Golang