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

fgw7neuy  于 2023-09-29  发布在  Java
关注(0)|答案(1)|浏览(204)

有一种方法可以使用GraalVM及其Python模块graalpython运行Python脚本,该脚本使用Java中的包。以下是示例https://github.com/paulvi/graalpython-java-template
我想知道是否有可能将GraalVM引擎和graalpython捆绑到我的Java应用程序中,并生成jar或本机映像(例如:使用GraalVM项目的本机映像编译器)?

wz3gfoph

wz3gfoph1#

从版本23.1开始,所有GraalVM附加语言现在都可以轻松嵌入Java中,包括非Graal JDK(但有警告!)通过使用Mavencentral上发布的Maven工件。这些工件嵌入并透明地按需提取必要的文件。
关于本机映像,这些语言现在的行为就像任何其他支持本机映像的Java库一样。native-image不需要额外的选项,只需将相关的jar文件放在modulepath(最好)或classpath上即可。
因此,在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 plugin for native-image
更多GraalPy documentation
旧答案适用于版本< 23.1
我认为你可以将整个GraalVM发行版与你的应用程序捆绑在一起,就像其他一些应用程序与普通JDK捆绑在一起一样(例如,我认为IntelliJ将JDK与它捆绑在一起)。这是最简单的选择。
您至少需要GraalPython主目录,其中包含GraalPython运行任何有意义的程序所需的Python标准库和其他文件。
而且,如果你想在JVM模式下运行,那么你需要在GraalVM上运行,其他的JDK是不支持的。从理论上讲,你也许可以通过JVMCI在JDK上运行GraalPython,就像JavaScript [0]一样,但使用GraalPython会更加复杂。
理论上,您可以通过提供自定义文件系统实现1将GraalPython主目录捆绑到应用程序中。
[0][https://www.graalvm.org/reference-manual/js/RunOnJDK/](https://www.graalvm.org/reference-manual/js/RunOnJDK/)
1https://www.graalvm.org/truffle/javadoc/org/graalvm/polyglot/io/FileSystem.html

相关问题