pyinstaller在exe文件中添加包含图像的文件夹

时间:2018-07-10 11:35:36

标签: python python-3.x pyinstaller

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

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

myprogram 
|-images_folder 
|-main.py

我该怎么办?

我要发射:

pyinstaller --onefile --windowed main.py

但是它会生成一个main.exe文件,该文件无法可视化,因为它们不包含在exe文件中。

2 个答案:

答案 0 :(得分:5)

要将图像包括在.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”。另外,将{main.py“文件所在的目录设置为pathex=

这将确保图像存储在可执行文件中。要访问它们,请将此功能添加到您的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")

答案 1 :(得分:1)

只是为了改善Francisco Rodrigues的最后一个答案。

    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")]

或出现错误消息“找不到文件”。