如何将Python版「羊了个羊」打包成exe文件

入门教程、案例源码、学习资料、读者群

请访问: python666.cn

大家好,欢迎来到 Crossin的编程教室 !

之前写过一个 Python 版的「羊了个羊」游戏:

羊了个羊,但是Python简(li)单(pu)版

后来有同学问,能不能打包成 exe 文件发给其他电脑上没有装 Python 环境的人玩。

b4dfdbc8bbdf178b38f47ede402b4790.png

这个当然没有问题!

今天就来介绍一下用 pyinstaller 打包成 exe 的流程。

省流版:

1. pip 安装 pyinstaller 库

2. pyi-makespec 命令生成 .spec 打包配置文件,并指定 --collect-all(包含所需模块)、-F(单文件模式) -w(无命令行窗口)

pyi-makespec 目标代码.py --collect-all pgzero -F -w

3. 修改 .spec 文件中的 datas 列表,加上图片、音乐等外部资源文件所在目录

datas = [('images', 'images'), ('music', 'music')]

4. pyinstaller 命令根据配置文件进行打包。

pyinstaller 目标文件.spec

打包需要前先确认两件事:

1. 要打包的Python程序可以在命令行正常运行

因为打包操作需要在命令行执行,如果游戏不能在命令行运行,说明命令行里配置的 Python 环境不正确,那即使能打包,生成的 exe 也无法运行。

2. 命令行里可以使用 pip 命令

这是为了能够安装打包用的 pyinstaller 模块。

64e5473b98e0cfbf609b4a0364f82d94.png

如果这两点有问题,请检查你的系统环境变量PATH里有没有加上Python的安装路径。(系统属性 - 环境变量 - 系统环境变量 - PATH,加上Python的安装路径及路径下的Scripts目录,并保证在最前面)

3148bdee0f1ec200cd80b844d8718e51.png

环境没有问题,就可以通过 pip 安装 pyinstaller:

pip install pyinstaller

如果下载太慢,在后面加上 -i 参数指定国内源,比如:

pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/

安装成功后,从命令行进入到代码所在目录,或者在文件夹中按住shift键,右键点击空白处,选择「在此处打开命令窗口」。

4ff9f7a69e0a01aa5d46cdb9327e98c5.png

在命令行中用 pyinstaller 命令直接打包代码文件:

pyinstaller 目标代码.py

完成后会看到两个文件夹,其中dist里就是打包好的程序。

1aa4527c6f5245abb0857fd961245a5a.png

一般简单的代码这样就打包好了。但也经常会出问题,比如「羊了个羊」这样打包后就无法正常运行,点击 exe 文件后窗口一闪而过就关闭了。

要查看程序出错的原因,可在 exe 文件所在目录的命令行下,直接输出文件名运行。这样就会看到报错输出。

42cc1a158f70ecc4c28cfcdf4d2ee18f.png

可以看到报错是说找不到pgzero里的一个资源文件。

这是因为游戏用到的第三方模块 pgzero 没有全部被打包进去。

删掉生成的两个文件夹重新打包(或者在打包过程中提示时选择覆盖),加上 --collect-all 参数,把 pgzero 模块打包进去。

pyinstaller 目标代码.py --collect-all pgzero

重新打包后依然不成功,但提示发生了变化,这说明前一个问题已经解决了,现在又有了新的问题。同样在命令行运行查看报错。

002bbc915d1f33814be676ba87e35bb4.png

报错说找不到图片。

这是因为游戏用到的图片、音乐等外部资源文件没有被打包进去。

添加外部资源文件的方法是通过 .spec 文件打包。

用文本编辑器打开之前打包生成好的 .spec 文件。

c329fec303d02173f7d92ffb20c8fef8.png

或者用 pyi-makespec 替换之前的 pyinstaller 命令,作用是不执行打包只生成 spec 文件。

pyi-makespec 目标代码.py --collect-all pgzero

找到里面的 datas 列表,以二元组的形式,把资源目录的实际路径和程序中的调用路径添加到列表里,注意书写格式。

00d16da8d2ac0184ab450f4af85d8aa3.png

把 pyinstaller 的打包对象换成 spec 文件,再次打包。

pyinstaller 目标文件.spec

成功运行!

73abc32fda3dcf60aeacd3660a4c40a3.png

不过还有2个小问题:

1. 打包生成的结果除了 exe 文件,还有一个 _internal 目录,里面有一堆文件,exe 必须带上这些文件才能运行。

89bb14421147fb2d88c2cd36ca9cae3f.png

2. 程序执行的时候,背后还跟着一个命令行窗口,看着很讨厌。

88bbcd339f3bc5f4664680685f7e02a2.png

因此,可以在 pyi-makespec 命令生成 spec 文件时:

  • 加上 -F 参数,设定将程序打包为单个文件;

  • 加上 -w 参数,设定不显示命令行窗口。

pyi-makespec 目标代码.py --collect-all pgzero -F -w

这样就能以不带命令行窗口的单 exe 文件形式成功打包「羊了个羊」游戏了。

作者:Crossin的编程教室


Crossin的第2本书《码上行动:利用Python与ChatGPT高效搞定Excel数据分析》已经上市了。

点此查看上一本《码上行动:零基础学会Python编程》介绍

b0c41ed0f0bfd59d91ff1e9659e2d3e6.jpeg

本书从 Python 和 Excel 结合使用的角度讲解处理分析数据的思路、方法与实战应用。不论是希望从事数据分析岗位的学习者,还是其他职业的办公人员,都可以通过本书的学习掌握 Python 分析数据的技能。书中创新性地将 ChatGPT 引入到教学当中,用 ChatGPT 答疑并提供实训代码,并介绍了使用 ChatGPT 辅助学习的一些实用技巧,给学习者带来全新的学习方式。

读者朋友们购买后可在后台联系我,加入读者交流群,Crossin会为你开启陪读模式,解答你在阅读本书时的一切疑问。

感谢转发点赞的各位~


_往期文章推荐_

一段奇葩的1024代码

Python复刻游戏《贪吃蛇大作战》


【教程】: python

【答疑】: 666

更多资源点击阅读原文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Crossin的编程教室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值