在 PyInstaller onefile 可执行文件中包含图像

Including an image in a PyInstaller onefile executable

我正在尝试使用 PyInstaller 的 onefile 选项制作可执行文件。我尝试了很多很多不同的方法来修复它,但我完全被卡住了。具体来说,我试过了 。我让我的规范文件看起来像他们的,并包含了 resource_path() 函数。但是,我收到以下错误:

File "PIL/Image.py", line 2953, in open
FileNotFoundError: [Errno 2] No such file or directory'/var/folders/t5/vkb5xkjs3517p5jlfkbj89vm0000gp/T/_MEIdOLb1O/logo.png'

所以我不确定我的问题是出在MEIPASS 部分,还是出在PIL 上。另一个奇怪的部分是,在此错误之前,我的代码包括:

self.iconbitmap(r"[workspace]/src/icon.ico")

这不会产生任何问题,即使这两个文件(icon.ico、logo.png)与我转换为可执行文件的程序位于同一文件夹中。如果它有所作为,我在 Mac.

上 运行

我目前使用的指令:

pyinstaller --noconfirm --onefile --console "[workspace]/src/gui.py" gui.spec  

和我的规范文件:

           # -*- mode: python ; coding: utf-8 -*-


block_cipher = None


a = Analysis(['gui.py'],
         pathex=['/Users/Freddie/Impruvon/guiwebscraperproject/venv/src'],
         binaries=[],
         datas=[],
         hiddenimports=[],
         hookspath=[],
         hooksconfig={},
         runtime_hooks=[],
         excludes=[],
         win_no_prefer_redirects=False,
         win_private_assemblies=False,
         cipher=block_cipher,
         noarchive=False)

for d in a.datas:
    if 'pyconfig' in d[0]:
        a.datas.remove(d)
        break

a.datas += [('logo.png','/Users/Freddie/Impruvon/guiwebscraperproject/venv/src/logo.png', 'Data')]
pyz = PYZ(a.pure, a.zipped_data,
         cipher=block_cipher)

exe = EXE(pyz,
      a.scripts,
      a.binaries,
      a.zipfiles,
      a.datas,  
      [],
      name='gui',
      debug=False,
      bootloader_ignore_signals=False,
      strip=False,
      upx=True,
      upx_exclude=[],
      runtime_tmpdir=None,
      console=True,
      disable_windowed_traceback=False,
      target_arch=None,
      codesign_identity=None,
      entitlements_file=None )

好吧,我确定我已经尝试过了,但是通过从 添加资源路径方法,但不更改规范文件,此命令有效:

pyinstaller --noconfirm --onefile --console --add-data "[workspace]/src/logo.png:."  "[workspace]/src/gui.py"