You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Bazel构建iOS MediaPipe手部追踪示例失败,如何正确构建?

解决MediaPipe iOS HandTrackingGpuApp构建时的plisttool错误

我之前在构建MediaPipe iOS手势跟踪项目时,也踩过这个plisttool的大坑,折腾了好一阵子才搞定。针对你遇到的问题——已经设置了--host_force_python=PY3但错误依然存在的情况,给你几个亲测有效的排查和解决步骤:

  • 第一步:彻底锁定Python 3路径,让Bazel精准找到它
    有时候系统里的Python环境比较混乱,即使你设置了--host_force_python=PY3,Bazel可能还是找错了路径。你可以:

    1. 先确认本地Python 3的绝对路径:which python3,比如输出可能是/usr/local/bin/python3或者/opt/homebrew/bin/python3(M系列Mac)。
    2. 构建时同时指定Python路径和强制版本:
      bazel build -c opt --host_force_python=PY3 --python_path=/你的python3绝对路径 mediapipe/examples/ios/handtrackinggpu:HandTrackingGpuApp
      

    或者把这两个参数加到项目根目录的.bazelrc文件里,一劳永逸:

    build --host_force_python=PY3
    build --python_path=/你的python3绝对路径
    
  • 第二步:更新build_bazel_rules_apple到兼容Python 3的版本
    旧版本的build_bazel_rules_apple对Python 3的支持可能有问题。打开项目根目录的WORKSPACE文件,找到http_archive对应的build_bazel_rules_apple部分,把它的commit哈希更新到较新的兼容版本(比如当前推荐的commit:0a46224b3b99f6e4c05f58bfb7a6f257942d8411),同时更新对应的sha256值(可以在GitHub上找到该commit的下载包sha256)。

  • 第三步:清理Bazel缓存,避免旧依赖干扰
    缓存里的旧文件很可能导致各种奇怪的兼容性问题,执行以下命令彻底清理:

    bazel clean --expunge
    

    清理完成后再重新执行构建命令。

  • 第四步:检查Entitlements文件的语法正确性
    有时候错误提示指向Python版本,但实际是HandTrackingGpuApp_entitlements.entitlements这个plist文件有语法错误。用系统自带的plutil工具检查:

    plutil -lint mediapipe/examples/ios/handtrackinggpu/HandTrackingGpuApp_entitlements.entitlements
    

    如果有语法错误,按照提示修复即可(比如缺少引号、括号不匹配等)。

  • 第五步:针对M1/M2 Mac的额外处理
    如果你的Mac是苹果芯片,可能需要指定架构参数避免Rosetta兼容性问题,构建命令加上--cpu=arm64

    bazel build -c opt --host_force_python=PY3 --python_path=/你的python3绝对路径 --cpu=arm64 mediapipe/examples/ios/handtrackinggpu:HandTrackingGpuApp
    

按照以上步骤逐一排查,应该能解决这个plisttool的执行错误。

内容的提问来源于stack exchange,提问作者annaFerdsf

火山引擎 最新活动