首页 > 解决方案 > 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 运行它时,我得到的唯一错误是 <no python frame>

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

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 似乎有效

标签: pythonpygamepyinstaller

解决方案


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

您应该在与脚本所在目录相同的目录中尝试从命令行或 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。


推荐阅读