Bazel 在python上的应用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bazel 在python上的应用相关的知识,希望对你有一定的参考价值。

参考技术A https://docs.bazel.build/versions/4.0.0/bazel-overview.html

一个google内部用的很不错的工具,旨在简化building process,把building process functionalize, 进而达到hermatic的效果(dependency 无丢失)。

快速,无误的编译对于开发团队至关重要。

WORKSPACE

- project

    -- main.py

    -- lib.py

   -- BUILD

The BUILD file specifies all the information needed to build the program.

```

bazel build main

bazel run main

bazel query "deps(main)" --notool_deps --noimplicit_deps

```

使用 Bazel 运行 Android 应用程序时构建失败

【中文标题】使用 Bazel 运行 Android 应用程序时构建失败【英文标题】:Build failing when running an Android app with Bazel 【发布时间】:2021-07-24 16:09:16 【问题描述】:

我正在尝试按照教程使用 Bazel 构建 Android 应用程序,如下所示: https://docs.bazel.build/versions/master/tutorial/android-app.html。正在使用以下命令成功构建应用程序:

bazel build //src/main:app

但是,当我尝试使用命令 bazel mobile-install //src/main:app 运行应用程序时,构建失败并出现以下错误:

INFO:分析的目标 //src/main:app(加载了 0 个包,配置了 0 个目标)。 信息:找到 1 个目标... 错误:/Users/kanzashaikh/examples/android/tutorial/src/main/BUILD:1:15:安装 //src/main:app 失败:(退出 1):incremental_install 失败:执行命令 bazel-out/darwin- 时出错py2-opt-exec-2B5CBBC6/bin/external/bazel_tools/tools/android/incremental_install --output_marker bazel-out/darwin-fastbuild/bin/src/main/app_files/full_deploy_marker --dexmanifest ...(剩余11个参数( s) 跳过) 回溯(最近一次通话最后): 文件“/private/var/tmp/_bazel_kanzashaikh/df06cea5303c222cca918b7a24c9d8ca/execroot/ma​​in/bazel-out/darwin-py2-opt-exec-2B5CBBC6/bin/external/bazel_tools/tools/android/incremental_install. runfiles/bazel_tools/tools/android/incremental_install.py”,第 25 行,在 从并发进口期货 ImportError:没有名为并发的模块 目标 //src/main:app 构建失败 使用 --verbose_failures 查看失败的构建步骤的命令行。 INFO:经过时间:0.311s,关键路径:0.19s 信息:3 个进程:3 个内部。 失败:构建未成功完成

如何解决这个问题?

【问题讨论】:

【参考方案1】:

看起来 bazel 正在使用 python2(文件路径中的 darwin-py2-opt-exec-2B5CBBC6 中的 py2),但 incremental_install.py 中的 from concurrent import futures 在 python2 中不起作用。

如果您没有安装 python3,请尝试安装它并查看是否可以解决问题。

如果您确实安装了 python3,请检查您的 bazel 版本,旧版本的 bazel 可能默认为 python2。

【讨论】:

您好,感谢您的回答!所以我确实检查了我的 python 和 bazel 版本,并且都更新了。 Python 版本是 3.9.5,bazel 版本是 4.1.0。但是,问题仍然存在。我是否特别需要告诉 bazel 以某种方式使用 python 3?还是应该自行检测?如果我需要具体说,你能告诉我怎么做吗? 我想补充一点,当我在终端中运行我的 python3 shell 并运行命令“从并发导入期货”时,它根本没有给我任何错误。所以,我假设 bazel 以某种方式使用 python2 或者它正在引用其他一些并发文件,但我也在我的系统中查找了任何名为 concurrent 的文件,但没有。

以上是关于Bazel 在python上的应用的主要内容,如果未能解决你的问题,请参考以下文章

Bazel 构建 Retrainer 失败

在 bazel 的 python 测试中使用二进制文件

Bazel + QtCreator

如何使用vscode python调试器来调试用bazel构建的项目?

初探 Bazel

让 Bazel 使用 python 3