Mac运行py2app打包时报/usr/sbin/authserver权限错误如何解决
解决方案
核心原因说明
该问题并非你漏配置py2app参数,是py2app依赖的modulegraph包更新后,目录扫描逻辑调整,触发了macOS系统完整性保护(SIP)的路径权限限制,/usr/sbin/authserver是受SIP保护的系统文件,禁止修改权限,不要尝试强行调整该路径的访问规则。
方案1:修改setup.py添加权限跳过逻辑(最快生效,无需修改依赖版本)
直接在你的setup.py文件最开头添加猴子补丁代码,拦截listdir的权限错误,跳过无权限路径,同时调整py2app配置缩小扫描范围:
# 新增的权限跳过补丁,放在文件最开头 import os from modulegraph import zipio _original_listdir = zipio.listdir def _safe_listdir(path, *args, **kwargs): try: return _original_listdir(path, *args, **kwargs) except PermissionError: # 无权限路径直接返回空列表跳过扫描 return [] zipio.listdir = _safe_listdir # 原来的setup内容保留,修改OPTIONS配置 from setuptools import setup APP = ['FileManagerApp.py'] DATA_FILES = [('data', '/Users/admin/Desktop/File_Manager/data/file_paths.txt')] # 调整OPTIONS配置,排除不必要的扫描内容 OPTIONS = { # 替换为你项目实际用不到的模块,可按需增删 'excludes': ['tkinter', 'test', 'unittest', 'matplotlib', 'django', 'numpy'], # 替换为你项目明确用到的模块,减少主动扫描范围 'includes': ['os', 'shutil', 'json'], 'scan_optional_extras': False } setup( app=APP, data_files=DATA_FILES, options={'py2app': OPTIONS}, setup_requires=['py2app'], )
修改完成后直接执行python3 setup.py py2app即可正常打包。
方案2:降级依赖版本(恢复到之前正常打包的状态)
如果你不想修改setup.py代码,直接将依赖回退到之前的稳定版本即可:
- 先卸载当前版本的问题依赖:
pip uninstall -y py2app modulegraph - 安装经过验证的兼容版本:
pip install py2app==0.28 modulegraph==0.19 - 清理旧缓存后重新打包:
rm -rf build dist __pycache__ && python3 setup.py py2app
注意事项
- 不要使用sudo执行打包命令,会导致生成的应用存在权限异常问题
- 不要修改
/usr/sbin路径下任何文件的权限,会触发系统安全风险甚至导致系统故障
内容的提问来源于stack exchange,提问作者Eric Zadoroznyj
相关产品推荐
相关产品推荐

