为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 TrueType 字体文件添加到 pyinstaller 可执行文件以用于 Pygame?

如何将 TrueType 字体文件添加到 pyinstaller 可执行文件以用于 Pygame?

蛊毒传说 2023-06-20 15:19:50
我创建了一个名为 breakout.py 的 python 文件,并想用 pyinstaller 创建一个 exe。python 文件需要与 python 脚本位于同一目录中的文件 ARCADECLASSIC.TTF 才能运行。此外,我希望能够运行 exe 文件而不必同时拥有字体文件。我尝试了多个 pyinstaller 命令来尝试执行此操作。我尝试了这个命令pyinstaller --add-binary "ARCADECLASSIC.TTF;." --onefile breakout.py并收到了权限被拒绝的错误号 13。然后我尝试编辑我的代码,使字体文件位于一个名为 fonts 的目录中,并尝试运行此命令但pyinstaller --add-binary "fonts/ARCADECLASSIC.TTF;fonts" --onefile breakout.py没有错误,但是当我运行 exe 文件时出现错误,说没有名为 fonts/ARCADECLASSIC.TTF 的文件所以崩溃了.我现在也尝试指定字体文件的完整目录,但它仍然不起作用。如果这有助于我的操作系统是 Windows,我正在使用 python 3.8.5 64 位和 pyinstaller 4.0。首先是我正在尝试做的事情,其次是如果可能的话我该怎么做以及我做错了什么。
查看完整描述

1 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

您将需要创建一个 .spec 文件并提及您要在其中包含的内容,例如字体或其他图像。


# -*- mode: python -*-


block_cipher = None



a = Analysis(['your python file.py'],

             pathex=['C:\\path\\to\\directory'], # just the directory not the file

             binaries=[],

             datas=[],

             hiddenimports=[],

             hookspath=[],

             runtime_hooks=[],

             excludes=[],

             win_no_prefer_redirects=False,

             win_private_assemblies=False,

             cipher=block_cipher)


a.datas += [('ttf file','path\\to\\ttf\\file', "DATA")]


pyz = PYZ(a.pure, a.zipped_data,

         cipher=block_cipher)


exe = EXE(pyz,

      a.scripts,

      a.binaries,

      a.zipfiles,

      a.datas,

      name='Your App Name',

      debug=False,

      strip=False,

      upx=True,

      console=False # set True if command prompt window needed

)

在游戏所在的实际 python 文件中包含此内容。


def resource_path(relative_path):

    try:

        base_path = sys._MEIPASS

    except Exception:

        base_path = os.path.abspath(".")


    return os.path.join(base_path, relative_path)

每当您想加载字体时,都可以这样做。


font = pygame.font.Font(resource_path("Font.ttf"), size)

在你的主 python 文件中有了它之后,在你的终端中输入你创建的规范文件。


pyinstaller yourspecfile.spec

这将创建您的可执行文件,它应该自己工作。


这是我以前项目中的规范文件的样子 # - - mode: python - -


block_cipher = None



a = Analysis(['lol.py'],

         pathex=['C:\\games\\snake'],

         binaries=[],

         datas=[],

         hiddenimports=[],

         hookspath=[],

         runtime_hooks=[],

         excludes=[],

         win_no_prefer_redirects=False,

         win_private_assemblies=False,

         cipher=block_cipher)


a.datas += [('8min.ttf','C:\\games\\snake\\8min.ttf', "DATA")]


pyz = PYZ(a.pure, a.zipped_data,

         cipher=block_cipher)


exe = EXE(pyz,

      a.scripts,

      a.binaries,

      a.zipfiles,

      a.datas,

      name='Snake',

      debug=False,

      strip=False,

      upx=True,

      console=False)


查看完整回答
反对 回复 2023-06-20
  • 1 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信