如何指定Bazel在Mingw64构建时使用已安装的Numpy二进制包
解决方案
一、让Bazel使用Pacman已安装的Numpy
要阻止Bazel重新编译Numpy,需将系统中Pacman安装的Numpy暴露为Bazel可识别的依赖目标,具体步骤如下:
- 创建系统Numpy的Bazel导入规则
在项目内新建third_party/python/numpy目录,创建BUILD文件,内容如下:
py_import( name = "numpy", imports = ["C:/msys64/mingw64/lib/python3.10/site-packages"], visibility = ["//visibility:public"], )
注:路径需与本地Numpy实际安装路径一致,可通过执行python -c "import numpy; print(numpy.__path__)"确认准确路径
- 修改项目BUILD文件的依赖配置
在你的py_wheel规则中,移除requires里的"numpy"条目,并在deps中添加上述导入的Numpy目标:
py_wheel( name = "my_wheel", distribution = "my", python_tag = "py3", version = "0.0.1", deps = [ ":my_pkg", "//third_party/python/numpy:numpy", # 新增系统Numpy依赖 ], requires = [ "appdirs", "importlib_resources", "matplotlib", "psutil", "PyGObject", "pyyaml", "more_itertools", "termcolor", # 移除原有的"numpy"条目 ], entry_points = { 'gui_scripts': [ 'my-gui = my.main:main', ], 'console_scripts': [ 'my_parser = example.my_parser:console_entry', ], } )
- 指定Bazel使用系统Python
在项目根目录的.bazelrc文件(无则新建)中添加配置,强制Bazel使用Mingw64环境的Python:
build --python_path=C:/msys64/mingw64/bin/python.exe
二、查看Bazel构建使用的Python和Pip版本
有两种便捷方式可查看:
- 直接执行版本查询命令
- 查看Python版本:
bazel run @python//:python -- --version - 查看Pip版本:
bazel run @python//:pip -- --version
- 通过构建日志查看
执行构建时添加--verbose_failures参数,日志中会明确显示Bazel调用的Python、Pip路径及对应版本:
bazel build //your_target --verbose_failures
内容的提问来源于stack exchange,提问作者Swaminath Bera
相关产品推荐
相关产品推荐

