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

使用rules_python的py_proto_library导致google模块被覆盖的问题求助

解决rules_python中py_proto_library覆盖google模块导致google.auth无法访问的问题

问题原因

当通过py_proto_library引入原生Protocol Buffers仓库的Python代码时,其python/google目录会被加入Python搜索路径,且优先级高于PIP安装的google-auth所在的site-packages/google目录。这导致Python优先加载protobuf提供的google模块,而该模块仅包含protobuf子模块,没有auth,因此触发ModuleNotFoundError。

可行解决方案

方案1:改用PyPI版本的protobuf依赖

放弃直接依赖原生Protocol Buffers仓库的Python代码,改用PIP管理的protobuf包,确保所有google子模块(包括protobuf和auth)处于同一site-packages/google目录下:

  1. 在requirements.txt中添加protobuf依赖项
  2. 通过pip_install生成PIP依赖规则:
    load("@rules_python//python:pip.bzl", "pip_install")
    
    pip_install(
        name = "pypi",
        requirements = "//:requirements.txt",
    )
    
  3. 在py_proto_library中引用PyPI版本的protobuf作为依赖:
    load("@rules_python//proto:py_proto.bzl", "py_proto_library")
    
    py_proto_library(
        name = "my_proto",
        deps = [":my_proto_lib"],
        proto_deps = ["@pypi//protobuf"],
    )
    
  4. 在py_binary中同时依赖@pypi//google-auth和:my_proto

方案2:调整Python搜索路径优先级

通过py_binary的pythonpath参数,将PIP依赖的site-packages路径前置,确保Python优先加载包含google.auth的模块:

py_binary(
    name = "app",
    srcs = ["app.py"],
    deps = [
        ":my_proto",
        "@pypi//google-auth",
    ],
    # 将google-auth和protobuf的site-packages路径放在最前面
    pythonpath = [
        "@pypi//google-auth:site-packages",
        "@pypi//protobuf:site-packages",
    ],
)

方案3:修改protobuf依赖的导入路径

通过proto_library的strip_import_prefix或py_proto_library的imports参数,调整protobuf生成代码的导入路径,避免与全局google模块冲突:

proto_library(
    name = "my_proto_lib",
    srcs = ["my_proto.proto"],
    strip_import_prefix = "/path/to/proto",
)

py_proto_library(
    name = "my_proto",
    deps = [":my_proto_lib"],
    imports = ["python"],
)

这样生成的代码会从import google.protobuf变为import python.google.protobuf,不会覆盖全局google模块,但需要同步调整业务代码中的导入语句。

内容的提问来源于stack exchange,提问作者Chuan Ye

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:01:13