繁体   English   中英

VirtualEnv Python作为MacOS中的Java Python解释器

[英]VirtualEnv Python as Java PythonInterpreter in MacOS

我目前正在寻找一种通过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 ,这是jython python解释器的版本。

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

可能吗? 如果是这样,如果有人可以提供帮助,请多谢。

您要的是不可能的。

Jython无法使用C-API扩展,其中包括NumPy。 sys.path更改为包括NumPy的安装位置将无济于事。

Jython 可以使用Java程序包,并且有一些Java程序包可以用于基于数组的数字,但是它们都不能替代NumPy。 您必须重写所有代码才能使用完全不同的API,并且它可能没有您所依赖的功能。


但是,如果您要做的就是用一些简单的字符串参数调用一些Python代码并返回一个字符串作为输出,则可以通过将CPython作为子进程运行来实现。 看来这正是您正在做的事情:您已经有了一些包装器代码,这些包装器代码仅导入您的模块,使用两个字符串调用一个函数,然后将返回值打印为字符串。

步骤1:将Python代码包装在脚本中,该脚本通过sys.argv接受其参数,并通过print输出其结果。

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

第3步:没有第3步。(或者是因为地球女孩很容易,某种生活发现了混乱的理论吗?我不知道,这就是杰夫·戈德布鲁姆的全部。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM