Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 让Bazel使用python 3_Python 3.x_Bazel - Fatal编程技术网

Python 3.x 让Bazel使用python 3

Python 3.x 让Bazel使用python 3,python-3.x,bazel,Python 3.x,Bazel,我想在Bazel中使用Python3运行py_测试 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 = "

我想在Bazel中使用Python3运行py_测试

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
但是,我想将python3导入到bazel sandbox,并使用新的_http_归档文件,为py_运行时规则提供解释器路径,该规则指向bazel sandbox中的http_归档文件。到目前为止,我无法找到解释器的路径。。。我是否必须从py_运行时的某个地方或其他地方引用http_归档标签

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"]
)"""
)

您正在下载的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_运行时规则将设置
解释器
属性(不是解释器路径):


谢谢,由于这种方法不是跨平台的,我将坚持使用“/usr/local/bin/python3”,尽管我想知道是否有一种方法可以让Bazel使用py_home的环境变量?您关心哪些平台?这应该适用于Linux上的大多数类型。对于Mac或Windows,您可以创建可供选择的新\u http\u存档,以获取安装程序。然后你的py_运行时规则可以在解释器上有一个select语句,根据平台选择要使用的解释器。当
srcs\u version=“py3”
时,我找到了另一种方法来使用
--python\u path=/usr/local/bin/python3--force\u python=py3
强制执行python 3,所以我现在将使用它(尝试获取
--python\u path
以接受环境变量),稍后可能会尝试您的方法,看看它是否有效。谢谢
py_runtime(
    name = "python-3.6.3",
    files = [],
    interpreter = "@python_version//:python",
)