JPype 是一个能够让 python 代码方便地调用 Java 代码的工具。在某些时候 java 的能力更强,我们可以用 java 写一个模块的功能然后用 Python 去调用。当然相应的也可以反着来,Java 使用 jython 调用Python
JPype与Jython(JPython后继者)的区别?
JPype安装
本人尝试过直接使用 pip3 install JPype1-py3 的形式,但貌似这样安装的版本不是很好,建议使用 wheel 进行安装
下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/
在网页中找到 jpype,我使用的版本是 Python3,下载的 wheel 是 JPype1?0.6.3?cp36?cp36m?win_amd64.whl
pip install xxx.wheel pip install numpy # jpype 依赖于 numpy
最好是 jar 文件在本地打包,本地开发,所以需要有 Java 的环境。不需要安装的自行跳过。
注意:Python 和JDK 版本需要一致,比如都是 64 bit
配置 Java 环境
安装 IDE
public class JpypeDemo { public int calc(int a, int b) { return a+b; } public static void main(String[]args) { JpypeDemo JpypeDemo = new JpypeDemo(); int a =JpypeDemo.calc(1,2); System.out.print(a); } }
将 Java 脚本打包成 jar 包
javac JpypeDemo.java # 会生成一个class文件
jar cf Demo.jar JpypeDemo.class
import jpype import os JVM_path = r"C:\Program Files\Java\jdk1.8.0_221\jre\bin\server\jvm.dll" # jvm.dll 是必须的,在jdk文件夹jre\bin\server\jvm.dll下 jarpath =r‘C:\Users\zhuminghui\Desktop\demo_test\Demo.jar‘ # 生成的 jar 包路径 Djava = "-Djava.class.path="+jarpath jpype.startJVM(JVM_path,"-ea",Djava) jpype.java.lang.System.out.println("HelloWorld") # 测试调用 Java 的环境 print JDClass =jpype.JClass("JpypeDemo") # jar 包中,Java 脚本中定义的类 jd = JDClass() # 实例化 print(jd.calc(1,2)) # 调用方法 # 关闭JVM jpype.shutdownJVM()
注意:jvm 只能启动一次,关闭一次,否则会报错。
坑点记录
如果 Java 脚本第一行声明了 package,在调用 JClass 实例化的时候需要做下更改
package aaa public class JpypeDemo { public int calc(int a, int b) { return a+b; } public static void main(String[]args) { JpypeDemo JpypeDemo = new JpypeDemo(); int a =JpypeDemo.calc(1,2); System.out.print(a); } }
import jpype import os JVM_path = r"C:\Program Files\Java\jdk1.8.0_221\jre\bin\server\jvm.dll" # jvm.dll 是必须的,在jdk文件夹jre\bin\server\jvm.dll下 jarpath =r‘C:\Users\zhuminghui\Desktop\demo_test\Demo.jar‘ # 生成的 jar 包路径 Djava = "-Djava.class.path="+jarpath jpype.startJVM(JVM_path,"-ea",Djava) jpype.java.lang.System.out.println("HelloWorld") # 测试调用 Java 的环境 print JDClass =jpype.JClass("aaa.JpypeDemo") # jar 包中,Java 脚本中定义的类 jd = JDClass() # 实例化 print(jd.calc(1,2)) # 调用方法 # 关闭JVM jpype.shutdownJVM()
使用 jpype 库实现 Python 调用 java 的 jar 包中的功能
原文:https://www.cnblogs.com/zhuminghui/p/11778617.html