pyinstaller在exe文件中添加带有图像的文件夹

新手上路,请多包涵

我有一个名为 main.py 的 python 脚本,它使用图像文件夹中同一路径中的一些图像。

我想创建一个 exe 文件,其中还包含 main.py 脚本中使用的图像。

 myprogram
|-images_folder
|-main.py

我该怎么办?

我正在启动:

 pyinstaller --onefile --windowed main.py

但它会生成一个无法显示图像的 main.exe,因为它们不包含在 exe 中。

原文由 michele 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 478
1 个回答

要在 .exe 文件中包含图像,您需要在 .spec 文件中指定它们:

 # -*- mode: python -*-

block_cipher = None

a = Analysis(['main.py'],
             pathex=['C:\\Python36\\Scripts'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)

a.datas += [('image.png','path_to_image', "DATA")]

pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='Name of your program',
          debug=False,
          strip=False,
          upx=True,
          console=False)

将其保存为 main.spec 并使用 pyinstaller main.spec 运行它 不要忘记将“image.png”替换为您的实际图像文件,将“path_to_image”替换为图像的文件路径。此外,设置 pathex= “main.py”文件所在的任何目录。

这将确保图像存储在可执行文件中。要访问它们,请将此函数添加到您的 main.py 文件中:

 import os

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)

然后,每次使用文件名“image.png”时,将其替换为 resource_path("image.png")

原文由 ArmindoFlores 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题