将 GraalVM 引擎和 graalpython 与 Java 应用程序捆绑在一起

问题描述 投票:0回答:1

有一种方法可以使用 GraalVM 及其 Python 模块来运行使用 Java 包的 Python 脚本

graalpython
。这是示例https://github.com/paulvi/graalpython-java-template

我想知道是否可以将 GraalVM 引擎和

graalpython
捆绑到我的 Java 应用程序中并生成 jar 或本机映像(例如使用 GraalVM 项目中的本机映像编译器)?

java python bundle graalvm graalpython
1个回答
1
投票

从版本 23.1 开始,通过使用 Mavencentral 上发布的 Maven 工件,所有 GraalVM 附加语言现在都可以轻松嵌入到 Java 中,包括非 Graal JDK(但有警告!)。这些工件嵌入并透明地按需提取必要的文件。

关于本机映像,这些语言现在的行为就像任何其他支持本机映像的 Java 库一样。本机映像不需要额外的选项,只需将相关的 jar 放在模块路径(最好)或类路径上即可。

因此,在 Java 中嵌入 GraalPy 就像将其添加到 pom.xml 中一样简单(或您选择的构建系统的等效代码):

    <dependencies>
        <dependency>
            <groupId>org.graalvm.polyglot</groupId>
            <artifactId>polyglot</artifactId>
            <version>23.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.graalvm.polyglot</groupId>
            <artifactId>python-community</artifactId>
            <version>23.1.0</version>
            <type>pom</type>
        </dependency>
    </dependencies>

要生成本机映像,可以使用本机映像的 Maven 插件

更多 GraalPy 文档


适用于版本的旧答案< 23.1

我认为您可以将整个 GraalVM 发行版与您的应用程序捆绑在一起,就像其他一些应用程序与普通 JDK 所做的那样(例如,我认为 IntelliJ 将 JDK 与其捆绑在一起)。这将是最简单的选择。

您至少需要 GraalPython 主目录,其中包含 GraalPython 运行任何有意义的程序所需的 Python 标准库和其他文件。

而且,如果你想以JVM模式运行,那么你需要在GraalVM上运行,其他JDK不支持。理论上,您也许可以以某种方式破解它,以便使用 JVMCI 在普通 JDK 上运行 GraalPython,就像使用 JavaScript [0] 一样,但使用 GraalPython 会更加复杂。

理论上,您可以通过提供自定义文件系统实现将 GraalPython 主目录捆绑到您的应用程序中1

[0] https://www.graalvm.org/reference-manual/js/RunOnJDK/

1https://www.graalvm.org/truffle/javadoc/org/graalvm/polyglot/io/FileSystem.html

© www.soinside.com 2019 - 2024. All rights reserved.