bazel - 用参数包装 py_binary

标签 bazel

//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/

相关文章:

machine-learning - tensorflow 初始阶段中预测标签图像无法加载计算图

bazel - 如何在 Bazel 工作区中找到所有公开可见的目标

c++ - 升级 Visual Studio 后 Bazel 不再工作

ruby - 如何在 Travis-CI 上为 TensorFlow 构建共享库

tensorflow - 使用 Bazel 安装 Tensorflow 时调用ProcessError

maya - 构建后重命名 bazel 输出(扩展)

c++ - Bazel 在文件通配方面是否存在与 CMake 相同的问题?

opencv - 如何使用 Bazel 构建项目使用 OpenCV

java - 在bazel中过滤java_library中resource_jars的内容

bazel - 为什么 bazel 失败,标题不在指定的 strip 前缀下