PyInstaller图标选项在Mac上不起作用

2022-03-24 00:00:00 python pyinstaller macos icons icns

问题描述

我在Mac上运行了以下命令并创建了一个.app文件。

pyinstaller --icon icon.icns --noconsole -n testApp main.py

但是,生成的.app文件不显示该图标。

icon.icns在info.plist中指定为图标文件。

Content/Resouces文件夹包含icon.icns。

当我运行.app文件时,我在Dock上看到一个图标。

但是,该图标不会反映在.app文件本身中。为什么会这样?


解决方案

您应该使用命令创建MacOS应用包

如果指定正确,则在运行pyinstaller命令后,icon.icns将被复制到Resources文件夹中,并应用于dist目录中的testApp.app包。(不要按照建议尝试.ico,这是针对Windows的)。

我刚刚尝试使用PySide2创建一个简单的Python应用程序,它将图标文件包含在应用程序包中,没有任何问题。

鉴于icon.icns与main.py位于同一目录:

您的命令应该是:

$ pyinstaller --onefile --windowed --icon icon.icns --name testApp main.py

这将生成应用程序包,您应该能够很好地运行它。


但请稍等,还有更多.

遗憾的是,故事还没有完全结束。

剧透:

要以正确的方式&q;做事情并使MacOS满意,还应包括:

--osx-bundle-identifier 'YOUR_IDENTIFIER'

这样等级库文件将包含生成的Info.plist文件的信息。

规范文件中还应该有一个描述Info.plist内容的部分,在以下几行中:

app = BUNDLE(exe,
         name='testApp.app',
         icon='icon.icns',
         bundle_identifier='com.youridentifier',
         info_plist={
            'NSPrincipalClass': 'NSApplication',
            'NSAppleScriptEnabled': False,
            'CFBundleDocumentTypes': [
                {
                    'CFBundleTypeName': 'My File Format',
                    'CFBundleTypeIconFile': 'MyFileIcon.icns',
                    'LSItemContentTypes': ['com.example.myformat'],
                    'LSHandlerRank': 'Owner'
                    }
                ]
            },
         )

在上面的示例中,键/值 'NSPrincipalClass': 'NSApplication' 是允许Mac OS X使用视网膜分辨率呈现应用程序所必需的。

'NSAppleScriptEnabled'被赋予Python布尔值false,它将作为<false/>输出到Info.plist。最后,键CFBundleDocumentTypes告诉Mac OS X您的应用程序支持的文件类型(如果有的话)。

相关文章