社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Crossin的编程教室 • 6 月前 • 134 次点击  

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

请访问: python666.cn


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


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

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

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

这个当然没有问题!

今天就来介绍一下用 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 模块。

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

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

pip install pyinstaller

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

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

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

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

pyinstaller 目标代码.py

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

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

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

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

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

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

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

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

报错说找不到图片。

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

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

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

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

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

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

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

pyinstaller 目标文件.spec

成功运行!

不过还有2个小问题:

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

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

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

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

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

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

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

作者:Crossin的编程教室



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

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

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


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

感谢转发点赞的各位~


_往期文章推荐_

一段奇葩的1024代码
Python复刻游戏《贪吃蛇大作战》



【教程】: python

【答疑】: 666
更多资源点击 阅读原文

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/164059
 
134 次点击