【问题标题】:pyinstaller add folder with images in exe filepyinstaller在exe文件中添加带有图像的文件夹
【发布时间】:2018-12-18 05:41:10
【问题描述】:

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

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

myprogram 
|-images_folder 
|-main.py

我该怎么办?

我正在发射:

pyinstaller --onefile --windowed main.py

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

【问题讨论】:

标签: python python-3.x pyinstaller


【解决方案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")

【讨论】:

  • 救命稻草!在我发现这个之前,我在其他各种无效的帖子上浪费了一天的时间。非常感谢!
  • 祝福你。我将添加一个额外的答案来详细说明我的经历,但这应该是公认的答案。
  • 确实是救星。在过去的两天里试图弄清楚这一点!
  • 谢谢!我花了一天时间寻找解决方案,这是第一个起作用的。 resource_path() 函数是我所缺少的。
【解决方案2】:

只是为了改进弗朗西斯科·罗德里格斯的最后一个答案。

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

'path_to_image' 更可能意味着后面有“image.png”的图像路径。

像这样:

    a.datas += [('image.png','C:\\User\\user\\Desktop\\image.png', "DATA")]

而不是:

    a.datas += [('image.png','C:\\User\\user\\Desktop', "DATA")]

或者有一个错误提示“找不到”文件。

【讨论】:

  • 这正是我的意思!我应该编辑我的答案吗?谢谢
猜你喜欢
  • 1970-01-01
  • 2020-09-12
  • 2022-10-17
  • 2012-04-14
  • 2014-01-03
  • 1970-01-01
  • 2013-04-10
  • 2020-11-18
  • 2015-10-28
相关资源
最近更新 更多