1

我用 C++ 和 python 实现了我的大部分项目。但是,我们最近获得了一个新的数据库接口,我只能使用 Java 来检索数据。

我想继续使用我的 Python/C++ 工具,但我想知道是否有一个很好的解决方案可以将 Java 集成到我的 Python 应用程序中。我听说过 Jython,但它是一个不同的 python 实现,我担心我的一些 C++ 工具不能很好地使用它。Jpype 看起来很简单,但它自 2011 年以来就没有更新过,所以有点担心与当前 python/java 的兼容性。

有没有好的解决方案?欢迎所有意见。

4

3 回答 3

0
  1. gcj (gcc compiler for java) 支持 java 1.5 语法(1.4 在它上面工作得更好),因此一些 Java 程序可以编译为本机代码。gcjh(或 javah)可以为 java 库生成头文件,因此您可以为 python 编写 C 扩展。当然,由于使用了 com.sun 包,一些库不能用 gcj 编译(如 Apache Commons Logging)。从 2009 年开始没有更新。

  2. 还有另一种 Java 到原生编译器,商业 Excelsior Jet(它是另一种 JavaVM,它支持 Java 1.6,很快就会支持 Java 1.7)。他们说他们产品的 linux-64bit 版本将在 2013-Q4 推出。但是我没试过,不知道能不能出编译库的头文件。

  3. pypi 上有很多包,例如 JCC(来自 PyLucene 创建者)或 Py4J,它们可以通过 JNI 或套接字使用 Oracle JavaVM。

于 2013-09-04T08:56:34.100 回答
0

一种方法是编写 Web 服务。Web 服务可以接受 HTTP 请求,将其编组为数据请求,将其传递给获取数据的 Java 类,将 quert 结果映射为某种响应,然后将其发回。

任何可以发送 HTTP 请求、接受响应并解组它的客户端都可以与该服务交互。他们不需要知道它是用 Java 实现的。

您支付额外的网络往返费用以获得语言互操作性的好处。

于 2013-08-30T17:20:59.673 回答
0

有一些包装 C/C++ 的方法,但我不能和他们说话。

然而,与 Java 集成非常简单。有一个名为 Jython 的 Python 发行版,它实际上在 JVM 上运行。使用 Java 库既直观又简单:

from java.io.util import *

并且在大多数情况下它只是工作(一些警告适用于线程/异步的东西)。我爱 Jython。我们在几个项目中使用了 Jpype,但即使它仍然得到完全维护,我仍然会在任何一天为此类项目选择 Jython。

于 2013-08-30T17:23:48.327 回答