Bazel,python3和python解释器选项

时间:2018-09-11 15:54:24

标签: python python-3.x bazel

我有一个庞大而多样的代码库,其中大部分是python(3),我正尝试使用bazel进行组织。

我希望(按重要性的顺序):

  1. 默认使用python3(理想情况下是特定版本,但是我可以忍受/usr/bin/python3中的所有内容)
  2. 最好以每个目标的方式将选项发送到python解释器
  3. 针对特定目标覆盖python解释器的选项和其他选项

现在我有一个局部解决方案,我想就它是否是惯用的以及可以在哪些地方进行改进提供一些建议。

/BUILD中,我有

genrule(
  name = "python3_interpreter",
  outs = ["python"],
  cmd = "echo '#!/bin/bash\n/usr/bin/python3 -OO \"$$@\"\n' > $@",
  executable = True,
)
py_runtime(
  name = "python3",
  visibility = ["//visibility:public"],
  interpreter = ":python3_interpreter",
  files = []
)

创建一个中间人的python解释器,我可以在其中为python解释器添加选项(在这种情况下为-OO)。

/.bazelrc中,我有

build --python_top=//:python3
run --python_top=//:python3

默认使用该解释器。

我可能会在genrule周围使用一个宏,以使添加解释器选项更加符合人体工程学(并可能以更结构化的方式搜索python3),但是仍然感觉很像黑客。

我还可以使用外部存储库从源代码下载并构建特定的python版本,这不仅需要更多的精力,而且还需要更多的隐秘性。

这些选项似乎都没有特别令人满意,也没有一个可以让我覆盖每个目标的选项。

任何建议或建设性批评都将受到欢迎。我已经在使用rules_python来管理点依赖。我也在考虑使用rules_pyz,它看起来更容易编辑以支持python我需要的其他功能(例如py_library取决于cc_library)。

0 个答案:

没有答案