DefaultInfo和PyInfo有什么关系
What is the relationship between DefaultInfo and PyInfo
我不清楚 DefaultInfo 运行文件的 transitive_files 和 PyInfo transitive_sources 之间的区别。它们是多余的还是有重要区别?
例如,我有一个自定义的 starlark 规则,我想将其作为 PyInfo 提供程序,但我想添加一个额外的提供程序,所以我不能使用本机 py_library 规则。
transitive_sources = [dep[PyInfo].transitive_sources for dep in ctx.attr.deps]
return struct(providers = [
DefaultInfo(
files = depset(sources + outs),
runfiles = ctx.runfiles(files = sources + outs, transitive_files = transitive_sources)
),
PyInfo(
transitive_sources = depset(direct = sources + outs, transitive = transitive_sources),
imports = depset(
direct = [_path_join(ctx.workspace_name, ctx.label.package, im) for im in ctx.attr.imports],
transitive = [dep[PyInfo].imports for dep in ctx.attr.deps]
)
),
_EggLibraryInfo(aditional_info="other stuff"),
])
我正在创建冗余 depsets 以满足这些提供者,这让我觉得我可能做错了。
我还尝试了另一种循环所有部门的 default_runfiles
的方法,并使用 runfiles.merge 作为 DefaultInfo。对于简单的情况,这些方法看起来是等价的,但我不知道是否还有其他情况下这些方法会有所不同。
PyInfo 文档可以使用一个部分来说明 transitive_sources 如何适合 DefaultInfo,以及为什么需要提供运行文件之外的其他机制。 https://docs.bazel.build/versions/master/skylark/lib/PyInfo.html
DefaultInfo
是 Bazel 的已知类型:
files
控制在 bazel build
目标时构建哪些文件,
runfiles
定义执行目标时需要在沙箱中显示哪些文件。
PyInfo
仅供 Python 规则使用,用于将元数据传播到消费目标。
我的猜测是重复是必要的,因为值可能不同,所以删除重复将意味着 Bazel 没有 build/include 正确的文件,或者使用 Python 规则缺少信息.
我不清楚 DefaultInfo 运行文件的 transitive_files 和 PyInfo transitive_sources 之间的区别。它们是多余的还是有重要区别?
例如,我有一个自定义的 starlark 规则,我想将其作为 PyInfo 提供程序,但我想添加一个额外的提供程序,所以我不能使用本机 py_library 规则。
transitive_sources = [dep[PyInfo].transitive_sources for dep in ctx.attr.deps]
return struct(providers = [
DefaultInfo(
files = depset(sources + outs),
runfiles = ctx.runfiles(files = sources + outs, transitive_files = transitive_sources)
),
PyInfo(
transitive_sources = depset(direct = sources + outs, transitive = transitive_sources),
imports = depset(
direct = [_path_join(ctx.workspace_name, ctx.label.package, im) for im in ctx.attr.imports],
transitive = [dep[PyInfo].imports for dep in ctx.attr.deps]
)
),
_EggLibraryInfo(aditional_info="other stuff"),
])
我正在创建冗余 depsets 以满足这些提供者,这让我觉得我可能做错了。
我还尝试了另一种循环所有部门的 default_runfiles
的方法,并使用 runfiles.merge 作为 DefaultInfo。对于简单的情况,这些方法看起来是等价的,但我不知道是否还有其他情况下这些方法会有所不同。
PyInfo 文档可以使用一个部分来说明 transitive_sources 如何适合 DefaultInfo,以及为什么需要提供运行文件之外的其他机制。 https://docs.bazel.build/versions/master/skylark/lib/PyInfo.html
DefaultInfo
是 Bazel 的已知类型:
files
控制在bazel build
目标时构建哪些文件,runfiles
定义执行目标时需要在沙箱中显示哪些文件。
PyInfo
仅供 Python 规则使用,用于将元数据传播到消费目标。
我的猜测是重复是必要的,因为值可能不同,所以删除重复将意味着 Bazel 没有 build/include 正确的文件,或者使用 Python 规则缺少信息.