【问题标题】:Converting .py to .exe generates black window application and disappears after a few seconds将 .py 转换为 .exe 会生成黑窗应用程序并在几秒钟后消失
【发布时间】:2019-12-16 11:00:00
【问题描述】:

我正在尝试将我的 pygame 项目转换为一个 .exe 文件,但输出为黑色窗口(图 3)。

我尝试使用具有此类设置的 auto-py-to-exe 应用程序来做到这一点(图 1)。在此之前,我曾在 PowerShell 中尝试过使用这行代码。

PS D:\my_projects\python_projects\tic_tac_toe_project> pyinstaller --onefile -w tic_tac_toe.py

两种解决方案都返回相同的输出(图 2 和图 3)而没有错误消息,而预期的输出是(图 4)。

图片 1

图片 2

图 3

图 4

console_output_img

【问题讨论】:

    标签: python python-3.x pygame pyinstaller


    【解决方案1】:

    编辑:

    所以这是使用pygame.font.SysFont() 的问题。我不确定为什么它不起作用,而且很难找到,因为它使用 .pyd 文件,我相信这是 c API 的扩展。解决此问题的方法是改用pygame.font.Font()。在您的应用程序中,您发送 None 作为字体,它只返回 pygame 的默认字体,即 freesansbold.ttf。要使用此字体,您需要将其包含在包中,因为它在 Windows 注册表中不存在。

    import os # Importing os and pygame at top of spec sheet
    import pygame
    
    pygame_dir = os.path.dirname(pygame.__file__) #  Grabbing the name of the local pg install
    path_t_font = os.path.join(pygame_dir, 'freesansbold.ttf')
    
    a = Analysis(['tic_tac_toe.py'],
                 pathex=[],
                 binaries=[],
                 datas=[(path_t_font, '.')], #  Adding the font to data
                 .....
    

    然后您需要将user_interface.py 中的第 12 行更改为:

    # self.font = pygame.font.SysFont(None, 24) Instead of this use the code below
    self.font = pygame.font.Font('freesansbold.ttf', 24)
    

    不知道为什么会发生这种情况,但这是一个 hacky 修复。

    如果您要使用 --onefile 模式,您还需要将其添加到 tic_tac_toe.py 脚本的顶部。

    import sys, os
    os.chdir(sys._MEIPASS)
    

    从旧答案:

    将详细标志添加到您的 PyInstaller 规格表中,以了解正在发生的事情。首先使用pyi-makespec <YOUR SCRIPT> 创建您的规格表,然后打开它创建的规格表。

    转到exe=EXE 部分并添加这段代码。

    exe = EXE(pyz,
              a.scripts,
              [('v', None, 'OPTION')],  # Add this right here
              exclude_binaries=True,
              name='main',
              debug=False,
              bootloader_ignore_signals=False,
              strip=False,
              upx=True,
              console=True )
    

    现在使用自定义规格表捆绑您的包,然后运行它。您应该得到一个显示一些消息的控制台。这将告诉您正在加载的内容并让您了解正在发生的事情。

    【讨论】:

    • 我在控制台窗口中没有发现任何错误。几秒钟后它仍然消失,但所有文件都已导入。所以还是不知道怎么回事?
    • 你有任何依赖吗?图标、图像、文件?
    • 不,它只是多个 .py 文件的项目。
    • 我刚刚制作了包含所有类的测试文件,唯一的导入是'sys','pygame','pygame.font'。当我尝试制作 .exe 时,结果是一样的。没有错误,黑色应用程序窗口。
    • 最后一条评论打错了。在运行栏 (windowskey-r) 中输入 cmd /k "the complete path to your exe" 。这将使控制台保持打开状态,以便您查看错误。确保您的规格表中的 console = true。
    猜你喜欢
    • 2021-05-12
    • 2021-06-06
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多