我有一個 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 關注
- 152 瀏覽
添加回答
舉報
0/150
提交
取消