Java Jython和python模块
我刚刚开始在Java类中使用Java Jython和python模块,java,python,interop,jython,Java,Python,Interop,Jython,我刚刚开始在Java类中使用PythonInterpreter,它工作得非常好!但是,如果我尝试包含python模块(re,HTMLParser,等等),我会收到以下异常(对于re): 线程“main”回溯中的异常(最里面的最后一个): 文件“”,第1行,是否在中? ImportError:没有名为re的模块 如何使jython jar中的类“看到”python提供的模块?根据: 4.1支持Python库的哪些部分? 好消息是Jython现在支持大部分标准Python库。坏消息是,这项工作进展如
PythonInterpreter
,它工作得非常好!但是,如果我尝试包含python模块(re
,HTMLParser
,等等),我会收到以下异常(对于re
):
线程“main”回溯中的异常(最里面的最后一个):
文件“”,第1行,是否在中?
ImportError:没有名为re的模块
如何使jython jar中的类“看到”python提供的模块?根据:
4.1支持Python库的哪些部分?
好消息是Jython现在支持大部分标准Python库。坏消息是,这项工作进展如此之快,很难使文档保持最新
内置模块(例如,那些用C语言为CPython编写的模块)是另一回事。为了供Jython使用,必须将它们移植到Java,或者用JNI桥实现。一些内置模块已经移植到JPython,最著名的是cStringIO、cPickle、struct和binascii。不过JNI模块不太可能包含在Jython中
如果您想使用标准Python模块,只需尝试导入它。如果这样行的话,你可能已经准备好了。您还可以对模块执行dir()操作,以检查它实现的函数列表
如果您真正需要的标准Python模块还不能与Jython一起使用,请发送邮件给我们
换句话说,您可以直接使用Jython的Python模块,除非您试图使用内置模块,在这种情况下,您将无法使用已移植到Jython的任何模块。检查Jython sys.path。确保要加载的库位于此路径中。
查看了解更多详细信息。您嵌入了jython,并将使用一些Python模块: 如果要在Java代码中设置路径(sys.path):
public void init() {
interp = new PythonInterpreter(null, new PySystemState());
PySystemState sys = Py.getSystemState();
sys.path.append(new PyString(rootPath));
sys.path.append(new PyString(modulesDir));
}
Py位于org.python.core中
rootPath和modulesDir是您想要的
让rootPath指向标准jython库所在的位置
查看Jython源代码中的src/org/python/util/PyServlet.java,例如您可以在这里参考解决方案 从这里下载
ez_setup.py
然后运行jython ez_setup.py
在任何文件夹路径上运行它都无关紧要
我可以用它安装pymysql,没问题。您可以使用jython的纯python模块。您不能使用用C实现的模块。re和HTMLPasser是与jython一起交付的。啊,那我错了。将此答案留作参考。@Michael您应该编辑最后一句话,这是误导性的。@smci修复了误导性的句子。
public void init() {
interp = new PythonInterpreter(null, new PySystemState());
PySystemState sys = Py.getSystemState();
sys.path.append(new PyString(rootPath));
sys.path.append(new PyString(modulesDir));
}