Bazel执行脚本遇ModuleNotFoundError:如何引入Python依赖?
解决Bazel运行Python代码时找不到github模块的问题
Bazel构建Python目标时会使用独立的沙箱环境,不会直接读取系统全局pip安装的包,必须通过Bazel的依赖管理规则引入第三方库,具体步骤如下:
1. 配置WORKSPACE文件
首先需要引入rules_python规则集,并配置pip依赖导入:
# WORKSPACE 文件内容 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # 引入rules_python http_archive( name = "rules_python", sha256 = "f8a63c6b3f5a397a649d645481f295678d21fbfb0d7fa33e4d4d2e91b9d3b243", url = "https://github.com/bazelbuild/rules_python/releases/download/0.25.0/rules_python-0.25.0.tar.gz", ) # 注册Python工具链 load("@rules_python//python:repositories.bzl", "python_register_toolchains") python_register_toolchains( name = "python3_11", python_version = "3.11", # 替换为你实际使用的Python版本 ) # 导入pip依赖 load("@rules_python//python:pip.bzl", "pip_install") pip_install( name = "pip", requirements = "//:requirements.txt", # 指向项目根目录的requirements文件 )
2. 创建requirements.txt文件
在项目根目录创建requirements.txt,指定需要的github库版本:
github==1.2.7
3. 修改BUILD文件
在你的py_binary目标中添加deps字段,引用Bazel管理的github库:
py_binary( name = "main", srcs = ["main.py"], deps = [ "@pip//:github", # 引用pip_install导入的github包 ], visibility = ["//visibility:public"] )
4. 重新运行Bazel命令
执行以下命令即可正常运行:
bazel run //:main
新版本rules_python适配(0.27.0及以上)
如果使用较新版本的rules_python,推荐使用pip_parse替代pip_install,步骤如下:
- 生成
requirements.lock文件:
pip freeze > requirements.lock # 或使用pip-compile生成更精简的锁定文件
- 修改WORKSPACE中的pip配置:
load("@rules_python//python:pip.bzl", "pip_parse") pip_parse( name = "pip", requirements_lock = "//:requirements.lock", ) load("@pip//:requirements.bzl", "install_deps") install_deps()
BUILD文件的deps配置保持不变。
内容的提问来源于stack exchange,提问作者Bharath
相关产品推荐
相关产品推荐

