首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Python集成

Java Python集成
EN

Stack Overflow用户
提问于 2009-07-13 22:15:24
回答 10查看 79.6K关注 0票数 56

我有一个Java应用程序,需要与第三方库集成。这个库是用Python编写的,我对此没有任何发言权。我正在试着找出与之整合的最好方法。我正在尝试JEPP (Java嵌入式Python) --以前有人用过它吗?我的另一个想法是使用JNI与Python的C绑定进行通信。

任何关于最好的方法的想法都将不胜感激。谢谢。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-07-13 14:17:25

为什么不使用Jython?我能立即想到的唯一缺点是,如果您的库使用CPython原生扩展。

编辑:如果你现在可以使用Jython,但认为以后版本的库可能会有问题,我建议你尝试将库与你的应用程序隔离(例如,某种适配器接口)。选择目前最简单的方法,然后在需要的时候考虑JNI/CPython/等。走(痛苦的) JNI路线不会有什么收获,除非你真的迫不得已。

票数 37
EN

Stack Overflow用户

发布于 2009-07-13 14:44:27

坦率地说,在JVM中直接运行的大多数方法都不适用于。它们要么不太兼容(你的第三方库的新版本可以使用python2.6特性,不能与Jython2.5一起工作),要么是hacky (它将打破神秘的JVM堆栈跟踪,而不是真正导致解决方案)。

我更喜欢使用RPC来集成这两者。如果您的数据量适中,XML RPC在这里是一个不错的选择。它得到了很好的支持-- Python在它的标准库中就有它。Java库也很容易找到。现在,根据您的设置,Java或Python部分将是一个接受来自其他语言的连接的服务器。

另一种不太流行但值得考虑的RPC替代方法是Google protobuffers,它有2/3的nice rpc支持。你只需要提供你的传输层。工作量不是很大,写作的便利性也是合理的。

另一种选择是围绕需要向Java公开的Python功能片段编写C包装器,并通过JVM原生插件使用它。你可以通过使用SWIG SWIG来减轻痛苦。

从本质上讲,在您的情况下,它是这样工作的:

  1. 为从Java到C++的所有方法调用创建SWIG接口。
  2. 创建C/C++代码,该代码将接收您的调用,并使用从python获得的正确python响应在内部调用python解释器,并通过swig将其发送回您的Java代码。

这个解决方案相当复杂,在大多数情况下有点过分。但是,如果您(由于某些原因)负担不起RPC,还是值得这样做的。不过,RPC仍然是我的首选。

票数 21
EN

Stack Overflow用户

发布于 2009-07-13 14:45:13

我的另一个想法是使用JNI与

的C绑定进行通信。

我非常喜欢JNA

Java为

程序提供了对本机共享库(Windows上的DLL)的轻松访问,而不需要编写任何代码--不需要JNI或本机代码。此功能可与Windows的平台/调用和Python的ctype相媲美。访问在运行时是动态的,不需要生成代码。

我的0.02$ :)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1119696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档