如何(密封地)在 Bazel 中包含 Python 解释器来构建 Python 库(sdist)

Ped*_*ori 9 python bazel

我如何(密封地)包含python作为(可执行)输入到我的genrule?

从概念上讲,我知道以下方法:

似乎也有几种方法可以这样做:


例子:

我有一个 python 库:

myproject
- setup.py
- mylibrary
  - __init__.py
  - myfunction.py
Run Code Online (Sandbox Code Playgroud)

我想pip installBazel制作一个-able 发行版,以便我可以:

pip install <path/to/distribution>
python
>>> from mylibrary.myfunction import helloworld
>>> helloworld()
Run Code Online (Sandbox Code Playgroud)

我添加了一个(空)WORKSPACE文件,myproject/WORKSPACE并遵循了这篇中等文章中的示例:

# myproject/BUILD
genrule(
    name = "mylibrary_sdist",
    srcs = glob(["**/*.py"]),
    outs = ["mylibrary.tar.gz"],
    cmd = "python setup.py sdist && mv dist/mylibrary*.tar.gz $(location mylibrary.tar.gz)"
)
Run Code Online (Sandbox Code Playgroud)

这有效(即产生bazel-genfiles/mylibrary.tar.gz),但我正在炮轰python.

我如何(密封地)包含python作为(可执行)输入到我的genrule?

Ven*_*ius 1

除非我误解了你的问题,否则这应该只是将实际路径传递给目标 python 可执行文件的问题。我会将 python 可执行文件检查到目录中third_party,而不是简单地使用调用您的 genrule,而是python将相对于该可执行文件的相对路径传递给WORKSPACE.

  • 好吧,我的第一反应是不要提供跨平台支持,除非你真的需要它。但如果您确实需要,我可能会首先检查相关平台的编译执行程序 - 然后您可以利用 Bazel 的[平台变量](https://docs.bazel.build/versions/master/platforms.html)帮助 Bazel 在构建时引用相关主机平台的特定可执行文件。 (2认同)