包//foo
有一个py_binary
:
py_binary(
name = "foo",
srcs = ["foo.py"],
visibility = ["//visibility:public"],
)
foo.py
接受 2 个位置命令行参数。
现在在包 //bar
中,我想创建一个“别名”,用于使用某些参数调用 foo
二进制文件。
遗憾的是,以下内容不起作用:
py_binary(
name = "bar",
deps = [
"//foo:foo",
],
args = [
"$(location first_file)",
"$(location second_file)",
],
data = [
":first_file",
":second_file",
],
)
问题是 py_binary
想要当前包中的主 src 文件。有其他的或更好的方法可以实现这项工作吗?
最佳答案
我通过创建 //foo:bind.bzl
解决了这个问题:
def bind_foo(name, **kwargs):
copy_file(
name = "%s.py.create" % name,
src = "//foo:foo.py",
dst = "%s.py" % name, # Appease local main search
) # Why is no copy_file action provided by Skylark???
py_binary(
name = name,
srcs = [
"%s.py" % name,
],
deps = [
"//foo:foo",
],
**kwargs
)
在 //bar
中我可以简单地使用:
load("//foo:bind.bzl", "bind_foo")
bind_foo(
name = "bar",
args = [
"$(location first_file)",
"$(location second_file)",
],
data = [
":first_file",
":second_file",
],
)
这也让整个事情更具表现力,所以耶:)
关于bazel - 用参数包装 py_binary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43371852/