Bazel构建iOS MediaPipe手部追踪示例失败,如何正确构建?
我之前在构建MediaPipe iOS手势跟踪项目时,也踩过这个plisttool的大坑,折腾了好一阵子才搞定。针对你遇到的问题——已经设置了--host_force_python=PY3但错误依然存在的情况,给你几个亲测有效的排查和解决步骤:
第一步:彻底锁定Python 3路径,让Bazel精准找到它
有时候系统里的Python环境比较混乱,即使你设置了--host_force_python=PY3,Bazel可能还是找错了路径。你可以:- 先确认本地Python 3的绝对路径:
which python3,比如输出可能是/usr/local/bin/python3或者/opt/homebrew/bin/python3(M系列Mac)。 - 构建时同时指定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绝对路径- 先确认本地Python 3的绝对路径:
第二步:更新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




