M1 Mac下如何将基于Pygame的Python脚本打包为DMG文件?
M1 Mac下Pygame程序打包DMG的可行方案
问题根源
M1系列为ARM64架构,py2app与Pygame的架构兼容性、资源文件格式、代码初始化顺序都可能导致打包失败,以下是针对性解决方法:
方法一:修复py2app配置,适配ARM64架构
- 重装适配ARM64的依赖包
pip install pygame py2app --force-reinstall --no-binary :all: - 创建
setup.py配置文件(替换your_script.py为你的脚本文件名)from setuptools import setup APP = ['your_script.py'] # 注意:将icon.ico转换为Mac支持的.icns格式,替换为你的图标文件名 DATA_FILES = ['app_icon.icns'] OPTIONS = { 'argv_emulation': True, 'packages': ['pygame'], 'includes': ['pygame'], 'plist': { 'CFBundleName': 'Desktop Clock', 'CFBundleDisplayName': 'Desktop Clock', 'CFBundleVersion': "0.1.0", 'CFBundleShortVersionString': "0.1.0", 'CFBundleIconFile': 'app_icon.icns' } } setup( app=APP, data_files=DATA_FILES, options={'py2app': OPTIONS}, setup_requires=['py2app'], ) - 执行打包命令,生成通用架构包
打包完成后,python setup.py py2app --universal2dist目录下会生成.app文件,可通过系统自带的磁盘工具将其打包为DMG。
方法二:改用PyInstaller打包(兼容性更好)
- 安装ARM64版本的PyInstaller
pip install pyinstaller --force-reinstall --no-binary :all: - 执行打包命令(替换对应文件名)
打包后pyinstaller --windowed --icon=app_icon.icns --name "Desktop Clock" --add-data "app_icon.icns:." your_script.pydist目录下的.app文件可直接转为DMG,--add-data参数用于确保资源文件被正确打包。
方法三:使用Conda环境规避架构冲突
- 安装适配M1的Miniforge,创建并激活专属环境
conda create -n pygame_env python=3.10 conda activate pygame_env - 安装适配ARM64的依赖
conda install pygame py2app -c conda-forge - 参照方法一的
setup.py配置执行打包即可。
代码优化建议
原代码存在两处可能导致打包后异常的问题,建议修改:
import pygame # 先初始化Pygame,再加载图标 pygame.init() # 替换为Mac支持的png/icns格式图标 img = pygame.image.load('app_icon.png') pygame.display.set_icon(img) size = (800, 600) screen = pygame.display.set_mode(size) pygame.display.set_caption("Desktop Clock") done = False while not done: for event in pygame.event.get(): if event.type == pygame.QUIT: done = True screen.fill((255, 255, 255)) pygame.display.flip() pygame.quit()
内容的提问来源于stack exchange,提问作者Tyguy47
相关产品推荐
相关产品推荐

