将NumPy和Cpython与Jython一起使用

2022-09-02 23:52:41

我必须使用一个商业Java库,并希望从Python中做到这一点。Jython是健壮的,我很高兴它落后几个点释放。但是,我也使用NumPy,这显然不适用于Jython。像CPype和Java数字库这样的选项没有吸引力。前者基本上已经死了。后者大多不成熟,缺乏NumPy的易用性和广泛接受度。我的问题是:如何让Jython和Python代码互操作?对我来说,从Cpython调用Jython是可以接受的,或者相反。


答案 1

具有讽刺意味的是,考虑到Jython和Numerity(NumPy的祖先)是由同一个开发人员(Jim Hugunin,他后来也启动了IronPython,现在在微软担任某种高级架构师职位,致力于对.NET和Silverlight的各种动态语言支持)发起的,在Jython中没有真正好的方法使用numpy。据我所知,最接近这一点的是“jnumerical”项目 - (稀缺的)文档在sourceforge上,但更新的源代码在bitbucket上。

jnumerical实现的“Numeric Python”并不像它的后代那样光滑和精简,但它具有大致相同的功能,并共享许多概念和哲学,所以也许你可以发现它是可用的 - 至少值得一试。


答案 2

考虑使用execnet,它允许您结合Jython和CPython的优势,包括当前的NumPy。这里的缺点是,您必须为两个不同进程空间中的两个解释器之间的序列化/反序列化对象的成本付费。(您可以通过使用其对子进程的支持来避免网络开销。但是这样的组合可能会很好,因为你正在考虑JPype,它将具有类似(可能更高)的开销。只需确保已对工作进行适当的分区即可。

Jython开发人员(我就是其中之一)正在考虑通过支持C Extension API来支持NumPy,但这确实是初步的规划。