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

Bazel包装器应如何查找其运行文件(runfiles)?

问题:Bazel规则中如何优雅获取Python可执行文件路径?

我构建了一个Bazel规则,其中创建了如下包装器可执行文件:

dist_dir = ctx.actions.declare_directory(ctx.label.name)
[...]
launcher = ctx.actions.declare_file(ctx.label.name + ".sh")
ctx.actions.write(
    output=launcher,
    content="""#!/bin/sh
PY_EXE=$(find . -name "python3" -executable)
exec "$PY_EXE" "$@"
""",
    is_executable=True,
)

我对使用find从运行文件(runfiles)中获取可执行文件的方式存疑,应该有更优的路径获取方法!

我了解到RUNFILES_DIR和RUNFILES_MANIFEST_FILE这两个环境变量,但在包装器脚本中添加env命令后,发现这两个环境变量均未被设置,实际仅能打印出TMPDIR和PWD。

脚本是否需要通过某种方式猜测路径?在我的示例中,使用find得到的PY_EXE路径为./bazel-out/k8-opt-exec-ST-d57f47055a04/bin/my_python.sh.runfiles/_main/my_python/bin/python3。其中第一部分为$0,最后一部分bin/python我可从规则的其余部分得知,my_python是ctx.label.name,剩下的_main来源不明,我不想在此硬编码任何内部细节。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 00:04:52