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
相关产品推荐
相关产品推荐

