从 Python 调用 Java

新手上路,请多包涵

从 python 调用 java 的最佳方法是什么? (jython 和 RPC 不是我的选择)。

我听说过 JCC: http ://pypi.python.org/pypi/JCC/1.9 一个用于从 C++/Python 调用 Java 的 C++ 代码生成器但这需要编译每个可能的调用;我更喜欢另一种解决方案。

我听说过 JPype:http: //jpype.sourceforge.net/ 教程: http ://www.slideshare.net/onyame/mixing-python-and-java

 import jpype
jpype.startJVM(path to jvm.dll, "-ea")
javaPackage = jpype.JPackage("JavaPackageName")
javaClass = javaPackage.JavaClassName
javaObject = javaClass()
javaObject.JavaMethodName()
jpype.shutdownJVM()

这看起来像我需要的。然而,最后一个版本是 2009 年 1 月发布的,我看到人们无法编译 JPype。

JPype 是一个死项目吗?

还有其他选择吗?

原文由 David Portabella 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

这是我对这个问题的总结:从 Python 调用 Java 的 5 种方法

http://baojie.org/blog/2014/06/16/call-java-from-python/ ( _缓存_)

简短回答:Jpype 工作得很好并且在许多项目中得到证明(例如 python-boilerpipe),但是 Pyjnius 比 JPype 更快更简单

我尝试过 Pyjnius/Jnius、JCC、javabridge、Jpype 和 Py4j。

Py4j 有点难用,因为你需要启动一个网关,增加了另一层脆弱性。

原文由 Jie Bao 发布,翻译遵循 CC BY-SA 3.0 许可协议

您也可以使用 Py4J 。首页上有一个示例和大量文档,但本质上,您只需从 python 代码中调用 Java 方法,就好像它们是 python 方法一样:

 from py4j.java_gateway import JavaGateway
gateway = JavaGateway()                        # connect to the JVM
java_object = gateway.jvm.mypackage.MyClass()  # invoke constructor
other_object = java_object.doThat()
other_object.doThis(1,'abc')
gateway.jvm.java.lang.System.out.println('Hello World!') # call a static method

与 Jython 不同,Py4J 的一部分在 Python VM 中运行,因此它始终与最新版本的 Python “保持同步”,并且您可以使用在 Jython 上运行不佳的库(例如,lxml)。另一部分运行在您要调用的 Java VM 中。

通信是通过套接字而不是 JNI 完成的,Py4J 有自己的协议(优化某些情况,管理内存等)

免责声明:我是 Py4J 的作者

原文由 Barthelemy 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏