Calling Java from Python Ask Question

Calling Java from Python Ask Question

Python から Java を呼び出す最良の方法は何ですか? (jython と RPC は私にとって選択肢ではありません)。

JCCについて聞いたことがあります:http://pypi.python.org/pypi/JCC/1.9C++/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 は廃止されたプロジェクトですか?

他に選択肢はありますか?

ベストアンサー1

また、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の作者です

おすすめ記事