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