VirtualEnv Python 作为 Java PythonMacOS 中的解释器

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 个包用于基于数组的数字,但是 none 包在任何地方接近 NumPy 的直接替代品;您必须重写所有代码才能使用完全不同的 API,并且它可能没有您所依赖的功能。


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

第 1 步:将 Python 代码包装在一个脚本中,该脚本通过 sys.argv 获取其参数,并通过 print.

输出其结果

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

第 3 步:没有第 3 步。(或者是因为地球女孩很容易,所以生活发现了混沌理论?我不知道,都是 Jeff Goldblum。)