Jython 和 python 模块

2022-09-02 10:05:05

我刚刚开始在我的Java类中使用从中,它工作得很好!但是,如果我尝试包含python模块(,等),我会收到以下异常(对于):PythonInterpreterreHTMLParserre

Exception in thread "main" Traceback (innermost last):
  File "", line 1, in ?
ImportError: no module named re

我怎样才能使 jython jar 中的类“看到”python 可用的模块?


答案 1

你嵌入了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 指向您位于标准 jython-lib 的位置

例如,看看 jython-Source-Code 中的 src/org/python/util/PyServlet.java


答案 2

根据常见问题解答

4.1 Python库的哪些部分受支持?

好消息是,Jython现在支持绝大多数标准Python库。坏消息是,这种情况发展得如此之快,很难使文档保持最新状态。

内置模块(例如,那些用C语言为CPython编写的模块)是另一回事。这些必须移植到Java,或者用JNI桥实现才能被Jython使用。一些内置模块已经移植到JPython,最着名的是cStringIO,cPickle,struct和binascii。不过,JNI模块不太可能包含在Jython本身中。

如果你想使用标准的Python模块,只需尝试导入它。如果这有效,您可能已经做好了准备。您还可以在模块上执行dir()以检查它实现的函数列表。

如果您确实需要一些标准Python模块,但该模块尚不适用于Jython,请给我们发送邮件。

换句话说,你可以直接使用Jython的Python模块,除非你试图使用内置模块,在这种情况下,你会遇到任何移植到Jython的东西。