JMA*_*MAA 5 python python-3.x bazel
我有一个庞大而多样的代码库,其中大部分是 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 = []
)
Run Code Online (Sandbox Code Playgroud)
创建一个中间人 python 解释器,我可以在其中向 python 解释器添加选项(-OO在这种情况下)。
在/.bazelrc我有
build --python_top=//:python3
run --python_top=//:python3
Run Code Online (Sandbox Code Playgroud)
默认为该解释器。
我可能会在 周围使用一个宏genrule来使添加解释器选项更符合人体工程学(并且可能python3以更结构化的方式进行搜索),但它仍然感觉很像黑客。
我还可以使用外部存储库从源代码下载和构建特定的 Python 版本,这需要付出更多努力,但也更加隐秘。
这些选项似乎都不是特别令人满意,也没有一个允许我覆盖每个目标的内容。
欢迎任何建议或建设性批评。我已经在使用rules_python来管理 pip 依赖项。我也在考虑使用rules_pyz,它看起来可能更容易编辑以支持我需要的其他 Python 功能(例如py_library,取决于cc_library)。