java - 使用 Runtime.exec 从 Java 运行 python 脚本(导入 spacy)
问题描述
我有这个问题。我有一个 Python 脚本做一些语义相似性。该脚本包括 import spacy 语句。这个脚本有一个方法和两个参数。当我在终端中运行这个脚本时,一切都很顺利。
import spacy
import sys
# Create your models here.
class Clustering():
nlp=None
def __init__(self):
self.nlp = spacy.load("es_core_news_md")
def process_text(self, text):
...
return " ".join(result)
def find_similarity(self, text1, text2):
fixedText1 = self.process_text(text1)
fixedText2 = self.process_text(text2)
doc1 = self.nlp(fixedText1)
doc2 = self.nlp(fixedText2)
print(doc1.similarity(doc2))
if __name__ == '__main__':
clus = Clustering('es', 'md')
clus.find_similarity(sys.argv[2],sys.argv[3])
这就是我运行脚本的方式
python semanticsimilarity.py find_similarity 'El perro se salió del pozo' 'El banano se salió del pozo'
但是,当我在 Java 中运行它时:
Process p = Runtime.getRuntime().exec("python semanticsimilarity.py find_similarity 'El perro se salió del pozo' 'El banano se salió del pozo'");
p.waitFor();
我收到此错误:
Traceback (most recent call last):
File "semanticsimilarity.py", line 9, in <module>
import spacy
ImportError: No module named spacy
有什么办法可以解决这个问题吗?我认为 java 正试图在 JVM 或其他东西中运行它,我不知道。
谢谢你。
解决方案
最有可能与 ENV 变量有关 - PATH , LD_LIBRARY_PATH and PYTHONPATH
. 将它们设置为原始 java 启动或在 python 命令上使用 shell 脚本包装器来显式设置它们
从脚本工作的终端获取 ENV 值echo PATH=$PATH ; echo PYTHONPATH =$PYTHONPATH ; echo LD_LIBRARY_PATH =$LD_LIBRARY_PATH ;
Option-1 在您的个人资料中设置
export PATH=
export PYTHONPATH=
export LD_LIBRARY_PATH=
Option-2 创建包装脚本
wrapSymSim.sh
export PATH=
export PYTHONPATH=
export LD_LIBRARY_PATH=
python semanticsimilarity.py "$@"
在你的java中调用它
Process p = Runtime.getRuntime().exec("wrapSymSim.sh find_similarity 'El perro se salió del pozo' 'El banano se salió del pozo'");
p.waitFor();
推荐阅读
- xslt - XSLT:删除空节点 ~AND~ 具有字面值“Null”的节点
- angular - Angular 2+ 主题按钮颜色不起作用
- powershell - 获取 Bitlocker 保护器信息然后备份到 AD 的脚本
- angular - 如何仅更改 Angular Material 预建主题中的原色?
- android - Exoplayer 的缓冲问题
- php - 获取数据的最简单方法
- c++ - 铿锵声 5 和 7 + omp
- reactjs - 来自纯 JavaScript 应用程序的 Django Rest Framework 身份验证
- monaco-editor - 如何获取 Monaco Editor 的行数组
- asp.net-mvc - 从直接页面而不是从选项卡发布的 ASP.NET MVC 表单