Python 从 Java 调用 Python 脚本时出现 ImportError
Python ImportError when calling Python script from Java
首先,有一个类似的问题 here 从未真正解决过。
我有一个 Python 脚本,我想从我的 Java 代码中执行它。当我 运行 单独运行 Python 脚本时,它可以正常工作。当我尝试从 Java process 执行它时,我得到一个 ImportError:
Traceback (most recent call last):
File "address_to_geocode.py", line 3, in <module>
from omgeo import Geocoder
ImportError: No module named omgeo
根据链接问题的建议,我在我的 Python 导入部分中附加了模块的直接路径,以确保解释器知道在哪里查找,但它仍然无法工作:
import sys, os
sys.path.append('/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/omgeo')
from omgeo import Geocoder
我的下一步是从 bash 脚本调用 python 脚本(同样,它自己运行),但是当我从 Java,同样的错误依然存在。因此,这个问题似乎在 Java 结束了。这是我的 java 代码:
Process p = runner.exec("python address_to_geocode.py");
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String stdReader = null;
//Read output of command:
while((stdReader = stdInput.readLine())!=null) {
System.out.println(stdReader);
}
//Read any command errors:
while((stdReader = stdError.readLine())!=null) {
System.out.println(stdReader);
}
p.waitFor();
我的 Java 代码有什么问题吗?或者这是一个错误?感谢您的指点。
我解决了。看起来 ProcessBuilder
不仅需要 python 文件本身的完整路径,还需要 python:
的完整路径
ProcessBuilder("/Library/Frameworks/Python.framework/Versions/2.7/bin/python",absolute_file_path);
这解决了问题。
$ cat ~/.bash_profile
Java代码
ProcessBuilder pb = new ProcessBuilder("/Users/micklin/anaconda2/bin/python","sentiment.py",done.toString());
code above is put in TweetFeeder.java so that .py file can be put under the project root
首先,有一个类似的问题 here 从未真正解决过。
我有一个 Python 脚本,我想从我的 Java 代码中执行它。当我 运行 单独运行 Python 脚本时,它可以正常工作。当我尝试从 Java process 执行它时,我得到一个 ImportError:
Traceback (most recent call last):
File "address_to_geocode.py", line 3, in <module>
from omgeo import Geocoder
ImportError: No module named omgeo
根据链接问题的建议,我在我的 Python 导入部分中附加了模块的直接路径,以确保解释器知道在哪里查找,但它仍然无法工作:
import sys, os
sys.path.append('/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/omgeo')
from omgeo import Geocoder
我的下一步是从 bash 脚本调用 python 脚本(同样,它自己运行),但是当我从 Java,同样的错误依然存在。因此,这个问题似乎在 Java 结束了。这是我的 java 代码:
Process p = runner.exec("python address_to_geocode.py");
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String stdReader = null;
//Read output of command:
while((stdReader = stdInput.readLine())!=null) {
System.out.println(stdReader);
}
//Read any command errors:
while((stdReader = stdError.readLine())!=null) {
System.out.println(stdReader);
}
p.waitFor();
我的 Java 代码有什么问题吗?或者这是一个错误?感谢您的指点。
我解决了。看起来 ProcessBuilder
不仅需要 python 文件本身的完整路径,还需要 python:
ProcessBuilder("/Library/Frameworks/Python.framework/Versions/2.7/bin/python",absolute_file_path);
这解决了问题。
$ cat ~/.bash_profile
Java代码
ProcessBuilder pb = new ProcessBuilder("/Users/micklin/anaconda2/bin/python","sentiment.py",done.toString());
code above is put in TweetFeeder.java so that .py file can be put under the project root