我刚刚开始PythonInterpreter
在我的 Java 类中使用 from ,而且效果很好!但是,如果我尝试包含 python 模块(re
、HTMLParser
等),我会收到以下异常(for re
):
线程“main” Traceback 中的异常(最里面的最后一个): 文件“”,第 1 行,在? ImportError:没有名为 re 的模块
如何让 jython jar 中的类“看到”python 可用的模块?
您嵌入了 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
根据常见问题解答:
4.1 支持 Python 库的哪些部分?
好消息是 Jython 现在支持绝大多数标准 Python 库。坏消息是,这发展得太快了,很难让文档保持最新。
内置模块(例如那些为 CPython 用 C 语言编写的模块)是另一回事。这些必须移植到 Java,或使用 JNI 桥实现,以便 Jython 使用。一些内置模块已移植到 JPython,最著名的是 cStringIO、cPickle、struct 和 binascii。不过,JNI 模块不太可能包含在 Jython 中。
如果您想使用标准 Python 模块,只需尝试导入它。如果这行得通,你可能已经准备好了。您还可以对模块执行 dir() 以检查它实现的功能列表。
如果有一些您真正需要的标准 Python 模块还不能与 Jython 一起使用,请给我们发送邮件。
换句话说,您可以直接使用来自 Jython 的 Python 模块,除非您尝试使用内置模块,在这种情况下,您会被移植到 Jython 的任何东西卡住。
检查您的 jython sys.path 。确保您要加载的库位于此路径中。查看jython 常见问题以获取更多详细信息。
您可以参考这里的解决方案Importing python modules in jython
ez_setup.py
从这里下载http://peak.telecommunity.com/dist/ez_setup.py
然后运行jython ez_setup.py <any module name>
。
在任何文件夹路径上运行它都没有关系。
我可以用它安装pymysql,没问题。