如何将Python代码打包为MacOS可安装的DMG文件?
解决MacOS下Python打包DMG安装包的问题
修复PyInstaller打包*.app的问题
- 不要用
--onefile参数打包.app,该参数用于生成单文件可执行程序,与.app bundle冲突。正确命令如下:pyinstaller --windowed --osx-bundle-identifier=com.example.MyApp --add-data "assets/images/logo.png:assets/images" app.py--windowed参数会生成带GUI的.app包,避免终端弹窗,生成的.app文件在dist目录下。 - 解决“无法打开,可能已损坏”问题:朋友拿到文件后,右键点击.app选择“打开”,或在终端执行
xattr -cr /path/to/MyApp.app移除文件隔离属性(非开发者签名的包会被MacOS安全机制拦截)。 - 生成DMG:用系统自带的
hdiutil命令手动打包.app为DMG,命令如下:
生成的DMG可直接分享,双击挂载后将.app拖到应用程序文件夹即可完成安装。hdiutil create -volname "MyApp Installer" -srcfolder ./dist/MyApp.app -ov -format UDZO MyApp.dmg
替代工具:使用Briefcase
Briefcase是Python官方推荐的跨平台打包工具,操作更简洁:
- 安装Briefcase:
pip install briefcase - 在代码目录下初始化项目:
按提示填写应用名称、包名、作者等信息,选择MacOS作为目标平台。briefcase new - 生成并打包:
执行完成后,briefcase build macos briefcase package macosdist目录下会生成DMG安装包,自动处理依赖和签名问题(默认自签名,朋友安装时需右键打开解除隔离)。
修复py2app的缺失模块问题
若坚持使用py2app,修改setup.py明确指定需要包含的模块:
from setuptools import setup APP = ['app.py'] DATA_FILES = [('assets/images', ['assets/images/logo.png'])] OPTIONS = { 'argv_emulation': True, 'packages': ['PySide6', 'PySide6.QtOpenGL'], 'includes': ['PyInstaller.hooks.hook-PySide6.QtOpenGL'] } setup( app=APP, data_files=DATA_FILES, options={'py2app': OPTIONS}, setup_requires=['py2app'], )
重新执行python setup.py py2app,若仍有缺失模块,继续在packages或includes中添加对应模块。
内容的提问来源于stack exchange,提问作者Ahmed Adel
相关产品推荐
相关产品推荐

