python - 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 似乎有效
解决方案
我会说这很可能是因为当作为 .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。
推荐阅读
- javascript - 从使用 lodash 创建的对象数组中获取 uniq 值
- ios - SwiftUI:列表中的分页问题
- c# - 当我单击按钮时,OpenFileDialog 冻结应用程序/GUI
- c# - 为什么逐行匹配datagridview中的列值会消耗大量内存?
- scala - 从scala中的字符串中检索值
- r - 使用双 for 循环将表传递到列表矩阵
- perl - 如何在由 plackup 执行的 Perl Dancer App 中传递命令行选项
- llvm - LLVM中`IRBuilderBase`和`BinaryOperator`的CreateNeg有什么区别?
- c++ - 为什么使用 __LINE__ 的这段代码在 MSVC 下可以在 Release 模式下编译,但不能在 Debug 模式下编译?
- javascript - Selenium 替代 Angular JS 页面中的 SendKeys()