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

MacOS Sonoma下通过命令行为Python程序授予定位服务权限的问题

MacOS Sonoma下通过命令行为Python程序授予定位服务权限的问题

嘿,我之前也碰到过MacOS上Python定位权限这种“反复跳票”的问题,Sonoma的TCC权限系统对命令行程序确实有点敏感,给你几个亲测有效的解决办法:

  • 用tccutil直接操作权限数据库(这是最靠谱的方法)

    1. 先把所有Python进程、iTerm2(或你用的终端)全部关掉,避免权限冲突
    2. 打开系统自带的Terminal(尽量不用第三方终端,减少干扰),输入以下命令重置所有定位服务权限:
      tccutil reset LocationServices
      
      不用担心,重置后其他需要定位的APP会重新弹出权限请求,不会影响正常使用
    3. 找到你正在使用的Python路径,输入命令:
      which python3
      
      会得到类似/usr/bin/python3或者虚拟环境的路径比如~/my_venv/bin/python3
    4. 给这个Python程序添加定位权限:
      tccutil add LocationServices /你的Python路径
      
      比如路径是/usr/bin/python3,就输入 tccutil add LocationServices /usr/bin/python3
    5. 重启终端,运行你的Python程序,这时候应该会正常弹出定位权限请求,允许之后去系统设置里检查,权限应该不会再自动关闭了
  • 检查虚拟环境的Python路径
    如果你用的是虚拟环境,一定要给虚拟环境里的Python单独授权,而不是系统默认的Python,因为虚拟环境的Python是独立的进程,系统设置里的“Python”可能指的是系统默认版本,和你实际用的不是同一个。

  • 补充测试:给终端APP授权
    偶尔也会出现终端本身需要权限才能让子进程(Python)获取定位的情况,你可以去系统设置 > 隐私与安全 > 定位服务里给iTerm2(或你用的终端)开启权限,再运行Python程序试试,不过这个一般是辅助手段,核心还是给Python本身授权。

这种问题的根源是MacOS的TCC权限数据库有时候对没有通过GUI框架触发权限请求的命令行程序,手动在系统设置里修改的权限不会被持久化保存,用tccutil直接操作数据库就能解决这个问题。

备注:内容来源于stack exchange,提问作者Gabriel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 07:49:50