我的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')
答案 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")
之类的东西一起使用。