Bazel:使用 bazel 安装 python

问题描述 投票:0回答:1

我正在研究 Bazel 构建 MVP,此过程中的一个步骤是在 CI 中运行我们的构建。然而,CI 构建运行在不包含太多内容的 docker 容器中。以前我必须将 gcc 添加到容器中才能构建 Bazel 本身使用的 python,但现在当我尝试使用

py_wheel
构建 python 库时,出现错误
/usr/bin/env: 'python3': No such file or directory
。一方面,我确实意识到我可以将所需的 python 添加到容器中,但这似乎不是密封的,然后必须在我们容器的 Docker 映像所在的 repo 中配置 python 版本保留,而不是在项目本身内,这增加了另一层复杂性。

有没有办法从 Bazel iteslf 安装所需的 python?还是我必须在 docker 中安装它?

UPD 我最初的方法是根据文档和 Brian Silverman 在下面描述的内容。我还尝试了其他方法(https://www.anthonyvardaro.com/blog/hermetic-python-toolchain-with-bazelhttps://thundergolfer.com/bazel/python/2021/06/25/a -basic-python-bazel-toolchain/),但无济于事。这些方法中的每一种都会下载 python,但是当我运行我的 python 二进制文件或

py_wheel
规则时,脚本会查找
/usr/bin/env python
,但找不到。

python bazel
1个回答
0
投票

对于大多数构建,您可以注册一个封闭的 Python 工具链

load("@rules_python//python:repositories.bzl", "python_register_toolchains")

python_register_toolchains(
    name = "python3_9",
    # Available versions are listed in @rules_python//python:versions.bzl.
    python_version = "3.9",
)

load("@python3_9//:defs.bzl", "interpreter")

load("@rules_python//python:pip.bzl", "pip_parse")

pip_parse(
    ...
    python_interpreter_target = interpreter,
    ...
)

大多数其他目标(

py_binary
等)将只使用工具链而无需任何更改。

但是,rules_python#691 说你需要一个系统安装的 python 来引导。那里有一些潜在的解决方法,我从来没有尝试过。

© www.soinside.com 2019 - 2024. All rights reserved.