VirtualEnv Python作为Java PythonInterpreter在M中

2024-04-24 14:27:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在寻找一种方法,通过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();
    }

我的问题

但每当我启动程序时,它都会显示numpy module not found错误。所以我检查了python版本,它显示了2.7.0,这是jythonpython解释器的版本。你知道吗

但是我所有的python库都安装在路径path/to/vir/env/bin的虚拟环境中。因此,我需要将java PythonInterpreter函数的解释器更改为我在虚拟环境中安装的python。你知道吗

有可能吗?如果是这样的话,如果有人能帮忙,我真的很感激。你知道吗


Tags: pathimport版本newstringsysoutpyobject
1条回答
网友
1楼 · 发布于 2024-04-24 14:27:30

你的要求是不可能的。你知道吗

Jython不能使用C-API扩展,包括NumPy。将sys.path更改为包含安装NumPy的位置不会有帮助。你知道吗

Jython可以使用Java包,而且有一些Java包用于基于数组的数字,但是没有一个可以替代NumPy;您必须重写所有代码才能使用完全不同的API,而且它可能没有您所依赖的功能。你知道吗


但是,如果您所要做的只是使用一些简单的字符串参数调用一些Python代码,并返回一个字符串作为输出,那么只需将CPython作为子进程运行即可。看起来这正是您所要做的:您有一些包装器代码,它只是导入您的模块,调用带有两个字符串的函数,并将返回值打印为字符串。你知道吗

步骤1:将Python代码封装在一个脚本中,该脚本通过sys.argv获取其参数,并通过print输出其结果。你知道吗

步骤2:使用安装了NumPy的virtualenv中的普通CPython解释器运行脚本,并使用管道捕获其输出。你知道吗

第三步:没有第三步。(或者是因为地球上的女孩很容易相处,所以生命发现了混沌理论?我不知道,全是杰夫·戈德布鲁姆。)

相关问题 更多 >