如何在 bazel 中为 Python 和 pip 选择运行时?

2023-12-01

我正在尝试在 Ubuntu 20.04 上构建一个应用程序,其中 python3 指向 Python3.8,并且我正在构建 aganist Python3.6

我在 WORKSPACE 的同一目录中有以下运行时。

$ cat BUILD.bazel 
py_runtime(
    name = "python3.6",
    interpreter_path = "/usr/bin/python3.6",
)

我尝试通过运行以下命令来构建应用程序,bazel 仍然指向 python3,即 python3.8

bazelisk build company/app_api:app --python_top=//:python3.6

我还尝试了已弃用的选项,但也不起作用。

bazelisk build company/app_api:app --python_path=/usr/bin/python3.6

这是我得到的错误:

...
subprocess.CalledProcessError: Command '['/usr/bin/python3', '-m', 'pip', '--isolated', 'wheel', '-r', '/source_code/src/python/third_party/requirements.txt']' returned non-zero exit status 1.
...

pip 正在尝试安装一个仅适用于 python3.6 的包,这就是它返回非零存在代码的原因。

如何强制 bazel 使用自定义 python 解释器?


py_runtime通常必须与py_runtime_pair and toolchain . See 这个例子 in the py_runtime_pair文档。该示例稍加修改以适用于 OP,如下所示:

load("@bazel_tools//tools/python:toolchain.bzl", "py_runtime_pair")

py_runtime(
    name = "python3.6",
    interpreter_path = "/usr/bin/python3.6",
    python_version = "PY3",   
)

py_runtime_pair(
    name = "py3.6",
    py3_runtime = ":python3.6",
)

toolchain(
    name = "py3-tc",
    toolchain = ":py3.6",
    toolchain_type = "@bazel_tools//tools/python:toolchain_type",
)

然后可以通过放置来使用新的工具链register_toolchains("//path/to/python3:py3-tc") in the WORKSPACE文件或传递--extra_toolchains //path/to/python3:py3-tc命令行标志。

将 python_interpreter 添加到 WORKSPACE 中的 pip_install 中。

pip_install(
    requirements = "//third_party:requirements.txt",
    python_interpreter = 'python3.6'
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 bazel 中为 Python 和 pip 选择运行时? 的相关文章

随机推荐