我刚刚开始PythonInterpreter
在我的Java类中使用from,它工作得很好!但是,如果我尝试包含python模块(re
,HTMLParser
等),我收到以下异常(for re
):
Exception in thread "main" Traceback (innermost last): File "", line 1, in ? ImportError: no module named re
我怎样才能让jython jar中的类"看到"python可用的模块?
你嵌入了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指向您找到standard-jython-lib的位置
看一下Jython-Source-Code中的src/org/python/util/PyServlet.java,例如
根据FAQ:
4.1支持Python库的哪些部分?
好消息是Jython现在支持大多数标准Python库.坏消息是,这已经发生了如此迅速的变化,很难保持文档的最新状态.
内置模块(例如用C语言编写的CPython模块)是另一回事.这些必须移植到Java,或者用JNI桥实现,以供Jython使用.一些内置模块已移植到JPython,最着名的是cStringIO,cPickle,struct和binascii.JNI模块不太可能包含在Jython中.
如果您想使用标准Python模块,只需尝试导入它.如果有效,你可能都已经完成了.您还可以在模块上执行dir()以检查它实现的函数列表.
如果有一些您真正需要的标准Python模块尚未与Jython一起使用,请发送邮件给我们.
换句话说,您可以直接使用Jython中的Python模块,除非您尝试使用内置模块,在这种情况下,您将无法使用已移植到Jython的任何内容.