【问题标题】:How can I convert pygame to exe?如何将pygame转换为exe?
【发布时间】:2014-01-21 16:32:12
【问题描述】:

最近,我做了一个 pygame 游戏。我想把它展示给我的朋友。但不幸的是,我无法制作可执行文件,只能制作.py 文件。我尝试使用可能不支持 Python 3.6 和 pyinstaller 的工具,例如 py2exe。我认为pyinstaller 可能有用,我也可以成功制作一个exe,但它根本不起作用。它只是显示它无法打开已经在同一个文件中的声音文件。

我尝试了两种加载文件的方法,首先加载路径,然后转换的exe显示无法打开与exe在同一路径中的文件。

其次,我使用了os.path,exe 显示它无法打开...../temp/...,这是一条很长的路径,但我的计算机根本没有这个文件夹。

我是一个学习python的新手。我已经搜索了一天,但无法使其工作。你能帮帮我吗?

【问题讨论】:

  • 欢迎来到 StackOverflow 并祝贺您编写了一个工作游戏。您的问题很清楚,但这不是那种容易回答的问题,也不是 StackOverflow 通常适用的问题类型。您可能应该尝试编写一个更简单的脚本来说明问题 - 也许您自己会遇到解决方案。否则,请在此处发布您无法使用的更简单的脚本,并附上有关您所做的操作以及导致问题的原因的说明。 py2exe 和 pyinstaller 都可能是很好的解决方案,如果你能让它们工作的话。
  • 你在使用 ogg 格式的声音吗?
  • 您遇到的一个更具体的问题是“如何在使用 PyInstaller 构建的可执行文件中加载文件?”如果是这样,this answer 提供了一个完整的示例。如果您在回答该答案后遇到特定问题,请编辑此问题或要求其他人获得进一步帮助。此外,阅读阅读How to Ask 将帮助您创建更有可能得到有用回答的问题。
  • 今天,我也有和你一样的问题。因此,我研究并在 Youtube 上看到了一个将 pygame 转换为 .exe 的视频指南。希望可以帮助任何有同样问题的人youtube.com/watch?v=lTxaran0Cig 无论如何,这个视频是从 2020 年 1 月制作的,所以在这个问题出现的时候我们还没有一个明确的答案

标签: python pygame


【解决方案1】:

@Blue Botic 上面的回答就像一个魅力!谢谢!

我在下面的命令中添加了“--noconsole”参数来摆脱控制台,只显示游戏的主窗口:

pyinstaller --onefile --noconsole main_game_script.py

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题,并花了几天时间通过谷歌搜索。今天终于意识到问题出在哪里。 在尝试转换之前,请记得通过终端安装 Pygame。只需输入“pip install pygame”

    【讨论】:

      【解决方案3】:

      1.添加--hidden-import pygame。 比如:
      python -m PyInstaller <options> xxx.py --hidden-import pygame
      2。破解 pygame 标准输出。 如果你使用选项-w,它会因为pygame的(烦人的)版本输出而失败。
      解决方法:

      import contextlib
      with contextlib.redirect_stdout(None):
          import pygame
      

      【讨论】:

        【解决方案4】:

        我只是一个脚本黑客,在命令行工具方面是个白痴。但我真的很想将我的 python 游戏打包成一个 Windows 可执行文件。我与 pyinstaller 搏斗了好几天,并阅读了其他人也试图弄清楚的所有线程,我还多次阅读了所有 pyinstaller 文档。没有一种解决方案对我有用,但经过多次试验和错误,我终于偶然发现了成功的秘诀,并想分享它,以防万一还有其他 pygame 开发人员对此表示反对。该解决方案包含多个线程的点点滴滴。

        如何在 Windows 上使用 pyinstaller 创建具有多个资产目录的多文件 python pygame 的单个文件 exe:

        首先,安装pyinstaller。

        打开 Windows 命令提示符,输入:

        pip install pyinstaller
        

        制作一个python游戏。假设主游戏文件名为 main_game_script.py,位于

        C:\Users\USERNAME\Documents\python\game_dir
        

        将此函数添加到 main_game_script.py。确保导入 os 和 sys。 (我自己永远不会想到我需要将此功能添加到我的游戏中,但它确实有效,所以感谢在其他线程中发布它的人)

        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)
        

        要将图像加载到游戏中,请调用该函数,如下所示:

        asset_url = resource_path('assets/chars/hero.png')
        hero_asset = pygame.image.load(asset_url)
        

        当您的游戏准备好打包到 EXE 中时,请打开 Windows 命令提示符。进入游戏主目录并输入:

        pyinstaller --onefile main_game_script.py
        

        看起来像这样:

        C:\Users\USERNAME\Documents\python\game_dir>pyinstaller --onefile main_game_script.py
        

        这将创建四个重要的项目:

        - a main_game_script.spec file in the game_dir
        - a 'build' dir in the game_dir
        - a 'dist' directory in the game_dir
        - a main_game_script.exe will be created in the 'dist' directory.
        

        运行该命令会产生大量警告和日志。我不知道这一切意味着什么。但只要最终输出行显示成功,您可能就很好。 您的 exe 将无法运行。首先,您必须修改 .spec 文件(现在存在于 game_dir 中)以将所需的游戏资源路径添加到 exe:

        在记事本或其他任何东西中打开 main_game_script.spec 文件。 用类似的资产目录路径替换空的 datas[] 列表(使用元组!):

        datas=[('assets/chars/*','assets/chars'),('assets/tiles/*.png','assets/tiles'),('assets/fonts/*','assets/fonts')],
        

        每个元组的第一个值是您要导入的实际文件名。 第二个值是 main_game_script.py 的相对路径 语法和路径一定要完美,不然不行也不会报错

        保存并关闭“main_game_script.spec”文件。返回到您的 Windows 命令提示符。类型:

        pyinstaller main_game_script.spec
        

        像这样:

        C:\Users\USERNAME\Documents\python\game_dir>pyinstaller main_game_script.spec
        

        这会以某种方式将资产目录路径嵌入到您已经构建的 exe 中

        完成所有这些(完成 100 次后只需几分钟),您终于有了一个包含所有游戏资产的 Python 游戏的单个文件 EXE。如果你做的一切都正确,双击EXE来玩你的python游戏。

        注意:第一次做对花了我几天时间。我从一个带有最少代码的简单 test_game_script.py 开始,并有条不紊地进行迭代,在每次迭代中添加更多资产路径和复杂性,这样我就可以隔离出什么被破坏了以及为什么。如果您的游戏没有正确转换为 EXE,请从一个包含一个资产的简单 5 行游戏脚本开始,然后在其上慢慢构建,直到您有一个可以工作的管道,然后将该有效的资产管道应用到您的 ACTUAL 游戏中。否则将无法隔离问题。

        【讨论】:

        • 我在 mac 和 windows 计算机上都尝试了这些步骤,但我不断收到此错误消息: Traceback (most recent call last): File "game.py", line 1, in ModuleNotFoundError: No module named 'pygame' [68210] 无法执行脚本游戏
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-23
        相关资源
        最近更新 更多