我有一个庞大而多样的代码库,其中大部分是python(3),我正尝试使用bazel进行组织。
我希望(按重要性的顺序):
/usr/bin/python3
中的所有内容)现在我有一个局部解决方案,我想就它是否是惯用的以及可以在哪些地方进行改进提供一些建议。
在/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
)。