将pygame打包成exe

1. 首先,安装pyinstaller。(注意:我自己打包是win10 pycharm中完成的,linux中打包应该直接生成不了exe文件)

pip install pyinstaller

制作一个Python游戏。假设主游戏文件名为 main.py,位于 D:\game_project

2. 将下面函数添加到 main.py 中。(注意:这个是最新版pyinstaller适用的代码,其他版本的resource_path函数,试过之后好像不太行)

import sys
import os

def resource_path(relative_path):
    try:
    # PyInstaller creates a temp folder and stores path in _MEIPASS
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")

    return os.path.join(base_path, relative_path)

3. 在main.py所有要使用路径将图像加载到游戏中的地方,调用该函数,下面是一个例子:

# 注意不是 pygame.image.load('assets/chars/hero.png')
hero_asset = pygame.image.load(resource_path('assets/chars/hero.png'))

4. 当游戏准备好打包到 EXE 中时。terminal转到主游戏目录并输入:

pyinstaller -w --onefile .\main.py --collect-data .\assets\audio --collect-data .\assets\fonts --collect-data .\assets\fruits --collect-data .\assets\pictures --collect-data .\assets\
powerups --hidden-import glcontext

其中,

  • -w / –windowed/–noconsole 表示程序启动的时候不会打开命令行,这样当exe文件运行有问题时会弹出报错窗口显示出错误信息,方便调试。否则,弹出的命令行会自动关闭,不容易查错
  • -F / --onefile 表示打包成单个文件
  • main.py是游戏的主程序
  • --collect-data .\assets\audio --collect-data .\assets\fonts --collect-data .\assets\fruits --collect-data .\assets\pictures --collect-data .\assets\powerups 是存放其他资源(图片,音频)的文件夹
  • --hidden-import glcontext 是为了防止运行exe时出现下面的错误:

traceback (most recent call last): file "main.py", line 465, in <module> file "moderngl\__init__.py", line 2174, in create_context modulenotfounderror: no module named 'glcontext'

5. 修改 .spec 文件(与main.py在同一文件夹中),将空的 datas[] 列表替换为assets目录路径,如下所示(使用元组!):

datas = [('.\\assets\\audio\\*','.\\assets\\audio'),('.\\assets\\fruits\\*png','.\\assets\\fruits'),('.\\assets\\fonts\\*','.\\assets\\fonts'),('.\\assets\\pictures\\*','.\\assets\pictures'),('.\\assets\\powerups\\*.png','.\\assets\\powerups'),('.\\assets\\frag_shader.glsl','.\\assets'),('.\\assets\\vert_shader.glsl','.\\assets')]

每个元组的第一个值是导入的实际文件名,第二个值是资源文件夹相对路径 (注意,不要使用'\',’/‘,我都试过会报错)

6. 保存并关闭“main.spec”文件:(注意,一定要保存,且关闭,再执行下面的命令,否则可能不会应用更改)

7. 打开terminal,输入:

pyinstaller main.spec

这就已经将assets目录路径中所有资源嵌入到构建的 exe 中了。

完成所有这些操作,就可以双击 EXE 来玩 Python 游戏了。

将exe发送给任何人,或者重命名都可以直接双击打开游戏。

参考链接:

https://stackoverflow.com/questions/54210392/how-can-i-convert-pygame-to-exe

https://stackoverflow.com/questions/72822188/freezing-python-moderngl-application-with-pyinstaller
Python升级之路( Lv13 ) pyinstaller 使用详解-腾讯云开发者社区-腾讯云



 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值