You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bazel BUILD文件中使用已安装的Python依赖包?

解决Bazel Python依赖引用的仓库解析错误

问题场景

使用Bazel 7.0.1构建Python项目,通过MODULE.bazel的pip.parse加载requirements.txt中的tink==1.9.0依赖,但在BUILD文件中通过requirement("tink")引用时,出现仓库解析错误:

no such package '@@[unknown repo 'pip_39_protobuf' requested from @@rules_python~0.31.0~pip~pip_39_tink]//': The repository '@@[unknown repo 'pip_39_protobuf' requested from @@rules_python~0.31.0~pip~pip_39_tink]' could not be resolved: No repository visible as '@pip_39_protobuf' from repository '@@rules_python~0.31.0~pip~pip_39_tink'

当前配置细节:

  • WORKSPACE文件保留旧版rules_python的http_archive配置(版本0.30.0)
  • MODULE.bazel中使用rules_python 0.31.0,通过pip.parse导入依赖
  • Python版本3.9.6

问题原因

  1. 版本冲突:WORKSPACE和MODULE.bazel中rules_python版本不一致,导致依赖解析逻辑冲突
  2. 子仓库未导入:tink依赖protobuf,pip.parse会为每个依赖生成独立仓库(如pip_39_protobuf),但仅用use_repo(pip, "pip")未导入这些子仓库,导致依赖链断裂

解决步骤

1. 清理WORKSPACE文件

Bazel 7+采用MODULE.bazel管理依赖,移除WORKSPACE中所有rules_python相关配置,修改后内容如下:

# 仅保留非rules_python的必要配置,若无则留空

2. 更新MODULE.bazel导入所有pip依赖仓库

修改use_repo语句,自动导入pip.parse生成的所有依赖仓库:

module(name = "my_module", version = "1.0")

bazel_dep(name = "rules_python", version = "0.31.0")

pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip")

python = use_extension("@rules_python//python/extensions:python.bzl", "python")

python.toolchain(
    configure_coverage_tool = True,
    python_version = "3.9",
)

pip.parse(
    hub_name = "pip",
    python_version = "3.9",
    requirements_lock = "//:requirements.txt",
)

# 导入pip主仓库及所有自动生成的依赖子仓库
use_repo(pip, "pip", *pip.repos)

3. 生成完整依赖锁文件(可选)

若仅用requirements.txt未包含间接依赖,执行以下命令生成锁文件:

bazel run @rules_python//python/tools/pip_compile -- requirements.txt > requirements_lock.txt

之后将MODULE.bazel中的requirements_lock改为//:requirements_lock.txt

4. 验证BUILD文件的依赖引用

在目标BUILD文件中正确加载并使用依赖:

load("@pip//:requirements.bzl", "requirement")

py_library(
    name = "my_lib",
    srcs = ["my_lib.py"],
    deps = [
        requirement("tink"),
    ],
)

5. 重新构建项目

清理缓存并重新构建,确认错误消失:

bazel clean --expunge
bazel build //path/to:my_lib

内容的提问来源于stack exchange,提问作者Nisha Tiwari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:42:59