Ink One

PyInstaller 打包 Python 程序

在 MacOS 上打包 Python,特别地,基于 PyQt 的程序,并添加对 Retina 的支持。

安装软件

Qt5

官网上下载 Qt5 在线安装器 qt-unified-mac-x64-online.dmg,按照提示安装 Qt5 组件。

SIP

官网下载tar.gz源代码包,解压缩并进入文件夹:

1
2
tar -xzvf sip-4.19.1.tar.gz
cd sip-4.19.1

执行安装:

1
2
3
python configure.py
make
make install

PyQt5

官网下载tar.gz源代码包,解压缩并进入文件夹:

1
2
tar -xzvf PyQt5_gpl-5.8.tar.gz
cd PyQt5_gpl-5.8

执行安装:

1
2
3
python configure.py
make
make install

PyInstaller

在终端执行:

1
pip install pyinstaller

打包程序

app 打包

使用 PyInstaller 将项目源码打包成 .app 。参考PyInstaller官方文档,首先对主文件(程序的入口文件)运行一次打包:

1
pyinstaller --windowed --onefile --clean --noconfirm main.py

在主文件目录下生成同名 .spec 文件,运行命令:

1
pyinstaller --windowed --onefile --clean --noconfirm main.spec

在 dist/ 目录下生成了 main.app 文件,双击运行。
app界面

添加图标和 Retina 支持

上述生成的 app 界面显示很模糊,解决办法是在修改 spec 文件。
默认生成的内容为:

1
2
3
4
5
# ...
app = BUNDLE(exe,
name='main.app',
icon=None,
bundle_identifier=None)

可修改 icon 项来自定义 app 图标。图标格式为 .icns,可在此下载。

添加 Retina 支持的办法是向其中添加:
info_plist={ 'NSHighResolutionCapable': 'True' }
如下所示:

1
2
3
4
5
6
7
app = BUNDLE(exe,
name='main.app',
icon='icon.icns',
bundle_identifier=None,
info_plist={
'NSHighResolutionCapable': 'True',
})

重新运行命令。

retina支持