包//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文件。还有其他或更好的方法可以使这项工作吗?
答案 0 :(得分:1)
我通过创建//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",
],
)
这也使整个事情更具表现力,所以yay:)
答案 1 :(得分:0)
您必须使用main
属性,例如:
py_binary(
name = "bar",
main = "//foo:foo.py",
srcs = ["//foo:foo"],
...
请注意,这意味着您必须在foo / BUILD中公开foo.py:
exports_files(["foo.py"])