微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

“pyinstaller game.py”工作正常,但 --onefile 不行 我不能有任何依赖项,因为它没有 --onefile 就可以工作

如何解决“pyinstaller game.py”工作正常,但 --onefile 不行 我不能有任何依赖项,因为它没有 --onefile 就可以工作

当我运行时:pyinstaller game.py 它工作正常。我将我的资源文件夹复制并粘贴到 dist 中,游戏运行完美。

然而,dist 文件夹中有很多其他文件,人们很难找到要点击的文件,所以我想使用 --onefile

我尝试这样做并将资源文件夹粘贴到 dist 并尝试运行游戏,控制台窗口出现一秒钟然后几乎立即消失。 (我假设我缺少一个依赖项,但这怎么可能?它在没有 --onefile 的情况下工作正常)

--onefile 是否不适用于我的布局以导入图像和字体或其他内容

图像:

if getattr(sys,'frozen',False):
    CURRENT_DIRECTORY = sys._MEIPASS
else:
    CURRENT_DIRECTORY = os.path.dirname(os.path.abspath(__file__))

bg = (pygame.image.load(os.path.join(CURRENT_DIRECTORY,r"Resources\backgroundlvl0.png")),pygame.image.load(os.path.join(CURRENT_DIRECTORY,r"Resources\backgroundlvl1.png")),r"Resources\backgroundlvl2.png")),r"Resources\backgroundlvl3.png")))

字体:

font = pygame.font.Font(os.path.join(CURRENT_DIRECTORY,r"Resources\arial.ttf"),36)

解决方法

好吧,这花了很长时间,但我相信我现在可以为任何感兴趣的人解答我的问题。

在我的 IDE 中运行我的游戏时,它可以正常工作,我会像这样导入相关图片:

bg = (pygame.image.load(os.path.join(CURRENT_DIRECTORY,r"Resources\backgroundlvl0.png")),pygame.image.load(os.path.join(CURRENT_DIRECTORY,r"Resources\backgroundlvl1.png")),r"Resources\backgroundlvl2.png")),r"Resources\backgroundlvl3.png")))

出于某种原因,如果我将我的资源文件夹和 game.py 移动到另一个目录,当我运行游戏时,我会得到一个 nameError: name 'os' is not defined python。然而,这对我来说是个谜,我还注意到 pyinstaller 不喜欢这种导入图像的格式,因此不适用于 --onefile。

因此,我尝试了这种替代方法:

    bg = (pygame.image.load(os.path.join('Resources','backgroundlvl0.png')),pygame.image.load(os.path.join('Resources','backgroundlvl1.png')),'backgroundlvl2.png')),'backgroundlvl3.png')) )

出于某种奇怪的原因,这在我的 IDE 中有效,但是,当我右键单击 .py 文件并按 open with -> python 3.8 时,它崩溃了。无论如何,它似乎适用于 pyinstaller。

带走什么:

如果您正在使用 pyinstaller 并且想要一个文件,请使用 pyinstaller --onefile name.py。确保在 name.py 中使用 os.path.join('foldername','file') 引用您使用的具有依赖项的文件夹。我必须专门这样做:pygame.image.load(os.path.join(....

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。