【问题标题】:Bazel: create py_binary from python file in py_libraryBazel:从 py_library 中的 python 文件创建 py_binary
【发布时间】:2016-04-14 13:20:38
【问题描述】:

Bazel 构建系统的新手。

我想从 py_library 中的文件创建一个 py_binary,该文件是从 http_archive 创建的。

目前我有:

WORKSPACE:

new_http_archive(
    name = "cpplint_archive",
    url = "https://pypi.python.org/packages/source/c/cpplint/cpplint-1.2.2.tar.gz",
    sha256 = "b2979ff630299293f23c52096e408f2b359e2e26cb5cdf24aed4ce53e4293468",
    build_file = "cpplint.BUILD",
    strip_prefix = "cpplint-1.2.2"
)

cpplint.BUILD:

py_library(
    name = "cpplint",
    srcs = glob(["*.py"]),
    visibility = ['//visibility:public']
)

src/BUILD:

py_binary(
    name = "lint",
    main = ":cpplint/cpplint.py",
    srcs = [":cpplint/cpplint.py"],
    deps = [
        "@cpplint_archive//:cpplint"
    ]
)

srcs 和 main 中的路径错误,当我运行 bazel run src/lint 时给出“没有这样的包 'cpplint/cpplint.py'”。我不知道如何引用库中包含的文件。

【问题讨论】:

    标签: python bazel


    【解决方案1】:

    您可以将py_binary规则直接放入cpplint.BUILD

    py_binary(
        name = "cpplint",
        srcs = ["cpplint.py"],
    )
    

    然后像这样构建它:

    $ bazel build @cpplint_archive//:cpplint
    INFO: Found 1 target...
    Target @cpplint_archive//:cpplint up-to-date:
      bazel-bin/external/cpplint_archive/cpplint
    INFO: Elapsed time: 2.327s, Critical Path: 0.01s
    

    如果您确实希望 py_binary 规则位于主存储库中,您可以这样做:

    cpplint.BUILD:

    exports_files(["cpplint.py"])
    

    BUILD:

    py_binary(
        name = "cpplint",
        srcs = ["@cpplint_archive//:cpplint.py"],
    )
    

    但是从其他包中拉入文件通常不是那么好。

    【讨论】:

    • 谢谢。我会看看哪个选项最适合我,但两种方法都有效。
    猜你喜欢
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 2017-08-02
    相关资源
    最近更新 更多