20

我刚刚开始PythonInterpreter在我的 Java 类中使用 from ,而且效果很好!但是,如果我尝试包含 python 模块(reHTMLParser等),我会收到以下异常(for re):

线程“main” Traceback 中的异常(最里面的最后一个):
  文件“”,第 1 行,在?
ImportError:没有名为 re 的模块

如何让 jython jar 中的类“看到”python 可用的模块?

4

4 回答 4

19

您嵌入了 jython,您将在某些地方使用一些 Python 模块:

如果要在 Java-Code 中设置路径(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-lib 的位置

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

于 2009-01-27T12:09:48.667 回答
7

根据常见问题解答

4.1 支持 Python 库的哪些部分?

好消息是 Jython 现在支持绝大多数标准 Python 库。坏消息是,这发展得太快了,很难让文档保持最新。

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

如果您想使用标准 Python 模块,只需尝试导入它。如果这行得通,你可能已经准备好了。您还可以对模块执行 dir() 以检查它实现的功能列表。

如果有一些您真正需要的标准 Python 模块还不能与 Jython 一起使用,请给我们发送邮件。

换句话说,您可以直接使用来自 Jython 的 Python 模块,除非您尝试使用内置模块,在这种情况下,您会被移植到 Jython 的任何东西卡住。

于 2009-01-22T22:39:59.247 回答
1

检查您的 jython sys.path 。确保您要加载的库位于此路径中。查看jython 常见问题以获取更多详细信息。

于 2009-01-22T22:44:13.967 回答
0

您可以参考这里的解决方案Importing python modules in jython

ez_setup.py从这里下载http://peak.telecommunity.com/dist/ez_setup.py

然后运行jython ez_setup.py <any module name>

在任何文件夹路径上运行它都没有关系。

我可以用它安装pymysql,没问题。

于 2015-11-26T10:30:07.463 回答