如何在Mac OS系统中使用Python解压.app.zip格式文件
Mac OS下Python解压.app.zip后程序损坏的解决方法
macOS中的
.app并非单文件,而是*程序包(Bundle)*结构,其可运行性依赖内部文件的执行权限、符号链接、扩展属性等元信息。默认使用zipfile.extractall()解压时会丢失这些元信息,导致.app被识别为零散文件夹无法正常启动。
方案1:zipfile手动恢复文件权限
如果压缩包为标准zip格式,没有存储Mac专属元数据,可在解压时手动恢复原文件权限:
import zipfile import os with zipfile.ZipFile(bin_file_path, 'r') as zip_ref: for file_info in zip_ref.infolist(): # 提取文件到目标目录 zip_ref.extract(file_info, temp_dir) # 恢复zip中存储的Unix文件权限 extracted_file_path = os.path.join(temp_dir, file_info.filename) os.chmod(extracted_file_path, file_info.external_attr >> 16)
方案2:调用系统原生unzip工具(兼容性最优)
如果压缩包包含Mac特有的资源分叉、扩展属性等信息,直接调用系统自带的unzip命令可完整保留所有属性,不会损坏.app结构:
import subprocess subprocess.run( ["unzip", "-q", bin_file_path, "-d", temp_dir], check=True, capture_output=True )
参数说明:
-q:开启静默解压,不输出过程日志-d:后面跟解压目标目录路径
验证说明
解压完成后可在Finder中查看目标目录,正常识别为.app程序包即代表解压成功,若首次打开提示“无法验证开发者”,右键点击.app选择「打开」即可跳过校验启动。
内容的提问来源于stack exchange,提问作者Sergey Ilchenko
相关产品推荐
相关产品推荐

