【问题标题】:make Bazel use python 3让 Bazel 使用 python 3
【发布时间】:2017-10-31 13:39:34
【问题描述】:

我想在 Bazel 中使用 python 3 运行我的 py_test。

py_library(
    name = "foo",
    srcs = ["foo.py"]
)

py_test(
    name = "foo_test",
    srcs = glob(["foo_test.py",]),
    deps = [":foo"]
)

py_runtime(
    name = "python-3.6.3",
    files = [],
    interpreter_path = "/usr/local/bin/python3",
)

我可以使用命令来实现这一点

bazel test --python_top=//path/to/foo:python-3.6.3 foo_test

但是,我想使用 new_http_archive 将 python3 导入到 bazel 沙箱,并为指向 bazel 沙箱中的 http_archive 的 py_runtime 规则提供解释器路径。到目前为止,我无法找到interpreter_path 是什么...我是否必须在 py_runtime 或其他地方引用 http_archive 标签?

new_http_archive(
name = "python_version",
urls = ["https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz"],
strip_prefix = "Python-3.6.3",
build_file_content = """
py_library(
    name = "python_srcs",
    srcs = glob(["Lib/*.py"]),
    visibility = ["//visibility:public"]
)"""
)

【问题讨论】:

    标签: python-3.x bazel


    【解决方案1】:

    您下载的 tgz 不包含解释器。它包含解释器的源代码。如果您想在构建过程中构建解释器,您可以这样做

    new_http_archive(
        name = "python_version",
        urls = ["https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz"],
        strip_prefix = "Python-3.6.3",
        build_file_content = """
    genrule(
        name = "build_python",
        srcs = glob(["**"]),
        outs = ["python"],
        cmd = "./external/python_version/configure && make && cp python $@",
        visibility = ["//visibility:public"],
    )""",
    )
    

    然后您的 py_runtime 规则将设置 interpreter 属性(不是解释器路径):

    py_runtime(
        name = "python-3.6.3",
        files = [],
        interpreter = "@python_version//:python",
    )
    

    【讨论】:

    • 谢谢,因为这种方法不是跨平台的,我会坚持使用 "/usr/local/bin/python3" ,尽管我想知道是否有办法让 Bazel 使用环境变量对于 py_home?
    • 您关注哪些平台?这应该适用于 Linux 上的大多数类型。对于 Mac 或 Windows,您可以创建替代 new_http_archives 来获取安装程序。然后你的 py_runtime 规则可以在解释器上有一个 select 语句来根据平台选择使用哪一个。
    • 我关心所有的平台。我找到了另一种在srcs_version ="PY3" 时使用--python_path=/usr/local/bin/python3 --force_python=py3 强制执行python 3 的方法,所以我现在将使用它(尝试让--python_path 接受环境变量),稍后可能会尝试你的方法,看看它是否有效。谢谢!
    猜你喜欢
    • 2013-10-08
    • 2015-02-19
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 2015-11-01
    • 1970-01-01
    相关资源
    最近更新 更多