我有一个 Go 项目(bazel-remote),当使用 Bazel 构建时,它试图读取在命令行中传递的 YAML 文件。此 YAML 文件与我运行命令的位置相同bazel run。但它无法运行,因为os.Open失败了_no such file or directory_。我打印了basePathusing os.Getwd,因为有人建议我basePath可能设置错误。但是 mybasePath设置为 my 中/private/var/tmp/创建和存储 Bazel 对象的位置:/private/var/tmp/_bazel`_`<username>``/312feba8ddcde6737ae7dd7ef9bc2a5a/execroot/__main__/bazel-out/darwin-fastbuild/bin/darwin_amd64_static_pure_stripped/bazel-remote.runfiles/__main`__如何basePath正确设置我的?为什么我的basePath设置到它所在的位置?
1 回答
动漫人物
TA贡献1815条经验 获得超10个赞
以 开头的二进制文件bazel run在内部 Bazel 目录中执行。他们将有权访问“运行文件”,这些文件是data二进制规则或其依赖项的属性中提到的文件。例如,如果您有如下规则,您将能够读取foo.txt,但不能读取bar.txt或 其他文件:
load("@io_bazel_rules_go//go:def.bzl", "go_binary")
go_binary(
name = "hello",
srcs = ["hello.go"],
data = ["foo.txt"],
)
请注意,二进制文件的工作目录对应于存储库根目录,而不是定义二进制文件的目录。您可以使用os.Getwd和进行调试filepath.Walk。
您提到过您想要访问在命令行中传入的 yaml 文件。据推测,您希望能够访问用户传入的任何文件,而不仅仅是属性中提到的文件data。对于这种情况,请查看BUILD_WORKING_DIRECTORY环境变量(bazel run设置)。bazel run这给出了调用目录的路径。此外,BUILD_WORKSPACE_DIRECTORY是工作区根目录的路径。
- 1 回答
- 0 关注
- 95 浏览
添加回答
举报
0/150
提交
取消