You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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,命令如下:
    hdiutil create -volname "MyApp Installer" -srcfolder ./dist/MyApp.app -ov -format UDZO MyApp.dmg
    
    生成的DMG可直接分享,双击挂载后将.app拖到应用程序文件夹即可完成安装。

替代工具:使用Briefcase

Briefcase是Python官方推荐的跨平台打包工具,操作更简洁:

  1. 安装Briefcase:
    pip install briefcase
    
  2. 在代码目录下初始化项目:
    briefcase new
    
    按提示填写应用名称、包名、作者等信息,选择MacOS作为目标平台。
  3. 生成并打包:
    briefcase build macos
    briefcase package macos
    
    执行完成后,dist目录下会生成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:44:59