Pyinstaller 没有窗口创建

问题描述

我用 pygame 创建了一个小游戏,想与朋友分享,因此我想将其转换为 .exe 文件。我使用的是 python 3.9.1、pygame 2.0.1 和 pyinstaller 4.1,我的操作系统是 Win 10。 尝试运行创建的 exe 文件后,没有窗口出现,控制台也只出现一瞬间。 我读到,pyinstaller 可能对包含的文件有问题,因此我用一个更简单的例子对其进行了测试:

import pygame
pygame.init()

surf = pygame.display.set_mode((600,600))
while True:
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            pygame.quit()
            break
    
pygame.display.update()

这里我有同样的问题,现在出现窗口,当我通过 cmd 运行它时,我得到的唯一错误

在测试其他脚本时出现以下错误

Fatal Python error: init_fs_encoding: Failed to get the Python codec of   the filesystem encoding
Python runtime state: core initialized
LookupError: unkNown encoding: utf-8

Current thread 0x00001f4c (most recent call first):
<no Python frame>

编辑 在 python 3.8.6 中使用 pyinstaller 似乎有效

解决方法

我会说这很可能是因为当作为 .exe 执行时,python.exe 无法找到并导入 pygame 模块。 pyinstaller 包含一个标志,您可以在其中指定当前安装的软件包的位置,然后将它们包含在它创建的 .exe 文件中。这样,即使您将 .exe 移动到新计算机,它也始终可以访问这些包。

您应该在与您的脚本所在的 scriptname.py 所在目录相同的目录中尝试从命令行或 powershell 执行以下命令...

python -m venv .venv
.\.venv\Scripts\activate
pip install pygame
pyinstaller --onefile --paths .\.venv\Lib\site-packages scriptname.py

这将创建一个新的虚拟环境,它是一个与整个系统中使用的目录不同的包目录。

激活虚拟环境。

将 pygame 安装到该虚拟环境中

然后将您的 scriptname.py 打包成一个包含 pygame 的 .exe。