具有 Python 的 GraalVM 多语言原生图像

GraalVM polyglot native image with Python

我正在尝试 运行 使用 java/python 的多语言原生图像。我可以使用此命令行创建本机图像:

 native-image --language:python javapython

但是当 运行 它与 ./javapython 它抛出这个错误:

启动失败,无法从 /lib-graalpython/builtins.py 读取核心库。也许你需要设置 python.CoreHome 和 python.StdLibHome.

在查找此说明时我发现了这个:

--python.CoreHome=<String>
--python.StdLibHome=<String>

我尝试使用 graalpython 添加它,使用 CoreHome 它看起来可以工作,但是使用 StdLibHome 抛出另一个错误:

原来的例外是:

回溯(最近调用最后): 文件“/importlib/_bootstrap.py”,第 986 行,在 _find_and_load ModuleNotFoundError:没有名为 'site'

的模块

然后 运行 再次 ./javapython 但它显示相同的错误。

有谁知道如何配置这些路径或为什么会这样?谢谢

GraalPython 需要知道在哪里寻找它的核心库文件以及 Python 标准库文件。通常,启动器($GRAALVM_HOME/bin/graalpython)会配置它,但如果您在应用中嵌入 GraalPython,则需要您自己提供。

一种可能性是导出 GRAAL_PYTHONHOME 指向 $GRAALVM_HOME/jre/languages/python(在基于 JDK11 的 GraalVM 构建上它将是 $GRAALVM_HOME/languages/python)。另一种是在构建上下文时提供所有选项:

Context context = Context.newBuilder()
              .option("python.CoreHome", "/path/to/graalvm/jre/languages/python/lib-graalpython")
              .option("python.StdLibHome", "/path/to/graalvm/jre/languages/python/lib-python/3")
              // ...
              .build()