PyInstaller EXE 变回原来的图标

PyInstaller EXE Changes Back To Original Icon

我使用以下命令使用 PyInstaller 创建了一个独立的 .exe 文件:pyinstaller --onefile -i "icon0.ico" test.py -w。当我打开 dist 文件夹时,exe 被放入其中显示我使用的图标但是当我从该文件夹复制或移动它时图标消失并且它 returns 回到库存PyInstaller 图标。

奇怪的是,如果我重命名文件,图标会保持原样,但我不能将其用作解决方案,因为我有其他文件依赖于我的 exe 是特定文件名。我使用 Resource Hacker 查看图标内容,我用我的图标完全替换了库存图标,但保存后没有任何变化,仍然是相同的旧库存 PyInstaller 图标。是的,我的 .ico 文件有所有不同的 256x256、128x128、64x64、48x48、32x32 和 16x16 尺寸。

我该怎么做才能解决这个问题?

PyInstaller 版本:3.4

Python版本:3.7.2

我通常使用:

pyinstaller --onefile -w --icon=*icon name*.ico test.py

我找到了解决此问题的方法,它可能也适用于您的情况。有关相关问题,请参阅

我有同样的问题,我尝试了放置 pyinstaller ... --icon=icon/path/icon.ico ... main.py 和编辑 pyinstaller.spec 文件,

exe = EXE(pyz,
          ...
          console=False , icon='C:\icon\path\icon.ico')

但是 none 这些解决方案似乎有效。
因此,如上文 link 所述,changing/renaming 目录 /dist/ 重命名 .exe 文件立即更改图标。

假设 python 3.10,您需要使图标在 pyInstaller 环境中已知。我的批处理文件是:

<full_path>\pyinstaller -wF --onefile --add-binary myicon.ico;. --icon myicon.ico app.py 2> build_log.txt

并在 python 文件中 app.py 添加:

import os, sys
if getattr(sys, 'frozen', False):
    # If the application is run as a bundle, the PyInstaller bootloader
    # extends the sys module by a flag frozen=True and sets the app 
    # path into variable _MEIPASS'.
    application_path = sys._MEIPASS
else:
    application_path = os.path.dirname(os.path.abspath(__file__))

然后参考图标:

os.path.join(application_path,'myicon.ico')

解决方案:

pyinstaller --noconfirm --onefile --name=filename --icon=icon.ico script.py

工作正常,但 .ico 文件必须与 .exe 文件位于同一目录中。任何其他选项也可以,但还没有尝试删除 --onefile.

注意:--name 必填。我不确定为什么。