如何使用python pyinstaller将图像包含在一个文件中

时间:2019-05-19 03:02:33

标签: python pyinstaller

我的python代码中包含图像位置,但是当我使用pyinstaller使用一个文件和所有的--add-data命令编译为exe时,该exe不会运行,说明找不到该图像。

这是我的规格文件

# -*- mode: python -*-

block_cipher = None


a = Analysis(['datasorter.py'],
             pathex=["C:\\Users\\Rat's Nest\\Desktop\\DATASORTERS\\V1.1"],
             binaries=[],
             datas=[('clogo.png', '.'), ('FullLogo.png', '.'), 
             ('logo.ico','.')],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='datasorter',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=False , icon='logo.ico')

1 个答案:

答案 0 :(得分:0)

首先,无需将可执行图标添加为数据,只需将其放在icon参数中即可。

接下来,当您将数据添加到PyInstaller时,它将带走数据并将其提取到temp文件夹(例如C:\Users\Rat's Nest\Appdata\local\temp\_MEIXXXX\)中,因此您需要更改代码以从该目录打开文件。一个好的做法是在代码中使用此功能来检索数据。运行可执行文件sys._MEIPASS时,将等于PyInstaller临时文件夹。

def resource_path(relative_path):
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, relative_path)
    return os.path.join(os.path.abspath("."), relative_path)

然后,您可以将其与new_source = resource_path("clogo.png")之类的东西一起使用。