使用 Bazel 创建和读取临时文件
Create and read temporary file with Bazel
我正在尝试使用 Bazel 为 TensorFlow 设置自定义构建系统。
我需要在配置步骤中创建一个临时文件,我将在构建步骤中将其用作缓存。
我能够在我的 .bzl 文件中创建它:
repository_ctx.file(filename)
在配置之后我可以看到它在文件夹中:
$HOME/.cache/bazel/_bazel_$USERNAME/%MD5%/external/%repository_name%
其中 repository_name 实际上是 repository_ctx.name
但我无法在构建期间从我的 .tpl 脚本访问此路径。我想通过 repository_ctx.template
的替换从 .bzl 脚本发送它,但即使在这里我也没有找到如何找到这条路径!
我似乎无法使用符号链接(如 bazel-out 或 bazel-genfiles)访问此文件夹(这听起来很有希望,但不是...)。我也无法在此文件夹之外创建文件。
这是一个非常简单的问题,我简直不敢相信除了硬编码路径或 find
它没有其他方法...
我猜问题是你没有在 repo 的 BUILD 文件中公开文件供你的构建使用它。您需要执行以下操作:
repository_ctx.file('whatever')
repository_ctx.file('BUILD', 'exports_files(["whatever"])')
然后您可以在任何其他 BUILD 文件中使用 @repository_name//:whatever
。
exports_files 用于让包依赖其他包的源文件。
然后,在构建期间加载的 .bzl 文件中,将该文件添加为属性,例如,
attrs = {
'_my_external_src' : attr.label(
default = Label('@my_repository//:whatever'),
allow_single_file = True,
),
},
那么在规则实现中,可以通过context访问:
def _impl(ctx):
print(ctx.file._my_external_src.path)
.path
获取文件的路径。
我正在尝试使用 Bazel 为 TensorFlow 设置自定义构建系统。 我需要在配置步骤中创建一个临时文件,我将在构建步骤中将其用作缓存。 我能够在我的 .bzl 文件中创建它:
repository_ctx.file(filename)
在配置之后我可以看到它在文件夹中:
$HOME/.cache/bazel/_bazel_$USERNAME/%MD5%/external/%repository_name%
其中 repository_name 实际上是 repository_ctx.name
但我无法在构建期间从我的 .tpl 脚本访问此路径。我想通过 repository_ctx.template
的替换从 .bzl 脚本发送它,但即使在这里我也没有找到如何找到这条路径!
我似乎无法使用符号链接(如 bazel-out 或 bazel-genfiles)访问此文件夹(这听起来很有希望,但不是...)。我也无法在此文件夹之外创建文件。
这是一个非常简单的问题,我简直不敢相信除了硬编码路径或 find
它没有其他方法...
我猜问题是你没有在 repo 的 BUILD 文件中公开文件供你的构建使用它。您需要执行以下操作:
repository_ctx.file('whatever')
repository_ctx.file('BUILD', 'exports_files(["whatever"])')
然后您可以在任何其他 BUILD 文件中使用 @repository_name//:whatever
。
exports_files 用于让包依赖其他包的源文件。
然后,在构建期间加载的 .bzl 文件中,将该文件添加为属性,例如,
attrs = {
'_my_external_src' : attr.label(
default = Label('@my_repository//:whatever'),
allow_single_file = True,
),
},
那么在规则实现中,可以通过context访问:
def _impl(ctx):
print(ctx.file._my_external_src.path)
.path
获取文件的路径。