graalvm访客语言可以使用第三方库吗?

pkbketx9  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(383)

我正在写一些在graalvm上运行的java代码
我想让它执行一个python脚本
python脚本使用第三方库
当我运行java代码时,会出现一个modulenotfounderror异常

// java code
public static void main(String[] args) throws IOException {
    try(Context ctx = Context.newBuilder().allowAllAccess(true).build()){
        Path scriptPath = Paths.get("/home/hyc/Desktop/py_script.py");
        String script = Files.readString(scriptPath);
        Value value = ctx.eval("python", script);
    }
}

// py_script.py
import requests                                                                                                        
url = 'http://www.google.com/'
strhtml = requests.get(url)        
print(strhtml.text)

源代码链接:https://github.com/huangdaren1997/polyglotdemo
graalvm访客语言是否可以使用第三方库?怎么做呢?
os:manjaro 20.2尼比亚
内核:x86_64 linux 5.9.11-3-manjaro
python:python 3.8.6版
openjdk 11 64位服务器vm graalvm ce 20.3.0

jhiyze9q

jhiyze9q1#

首先,您需要安装软件包,我假设您已经安装了,但是为了完成这个回答:

graalpython -m ginstall install requests

然后需要配置graalpython来导入站点模块。如果通过可执行文件运行graalpython,则默认情况下会执行此操作,但在java中嵌入graalpython时则不会执行此操作:

Context.newBuilder().option("python.ForceImportSite", "true")...

请注意,此设置将取决于站点库中安装的所需软件包。钻头清洁剂的解决方案可能是使用 venv graalpython还支持的模块:

graalpython -m venv /path/to/you/new/venv/directory

然后安装你需要的

/path/to/you/new/venv/directory/bin/graalpython -m ginstall install ...

然后再将此选项传递给graalpython:

.option("python.SysPrefix", "/path/to/you/new/venv/directory")

相关问题