我目前正在寻找一种方法,通过Java从python脚本中获取一些输出。在找到jython之后,我使用PythonInterpreter
发送参数并接收我期望的输出。
我的代码
PythonInterpreter interpreter = new PythonInterpreter();
String fileUrlPath = "/Users/me/Desktop/";
String scriptName = "pythonScript";
interpreter.exec("import sys\n" + "import os \n" + "sys.path.append('" + fileUrlPath + "')\n"+ "from "+scriptName+" import * \n");
String funcName = "predictionFunction";
PyObject someFunc = interpreter.get(funcName);
try
{
PyObject out = someFunc.__call__(new PyString(pathToImageFolder), new PyString(fileName));
System.out.println(out);
}
catch (PyException e)
{
e.printStackTrace();
}
My Problem
但是每当我启动我的程序时,它都会显示numpy module not found
错误。所以我检查了python的版本,它显示了2.7.0
,这是jython python解释器的版本。
但是我所有的python库都安装在path path/to/vir/env/bin
的虚拟环境中。因此,我需要将java PythonInterpreter
函数的解释器更改为我在虚拟环境中安装的python。
有可能吗?如果是这样的话,如果有人能帮上忙,真的很感谢。
发布于 2018-07-25 08:40:21
你所要求的是不可能的。
Jython不能使用C-API扩展,包括NumPy。更改sys.path
以包含安装NumPy的位置不会有任何帮助。
Jython可以使用Java包,也有用于基于数组的数字的Java包,但它们都不是NumPy的临时替代品;您必须重写所有代码才能使用完全不同的应用编程接口,而且它可能没有您所依赖的特性。
但是,如果您所要做的只是使用一些简单的字符串参数调用一些Python代码,并将字符串作为输出返回,那么只需将CPython作为一个子进程运行即可。看起来这正是您正在做的:您有一些包装器代码,它只是导入您的模块,调用一个具有两个字符串的函数,并将返回值打印为一个字符串。
步骤1:将Python代码打包到一个脚本中,该脚本通过sys.argv
接受参数,并通过print
输出结果。
步骤2:在安装了NumPy的virtualenv中使用普通的CPython解释器运行脚本,并使用管道捕获其输出。
第三步:没有第三步。(或者是因为地球上的女孩很容易,所以生命发现了一些混沌理论?我不知道,这都是Jeff Goldblum造成的。)
https://stackoverflow.com/questions/51509289
复制相似问题