【问题标题】:How to include images in one file with python pyinstaller如何使用 python pyinstaller 在一个文件中包含图像
【发布时间】:2019-05-21 11:08:54
【问题描述】:

我的 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')

【问题讨论】:

    标签: python pyinstaller


    【解决方案1】:

    首先,无需将可执行图标添加为数据,将其放入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") 之类的东西一起使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-07
      • 2015-10-28
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      • 2016-12-12
      相关资源
      最近更新 更多