Python -- jpype
安装 jpype
如图:直接执行 命令:pip install jpype 可见失败,提示没有版本信息
可以使用 pip search jpype 查看相关版本信息
使用命令 pip install JPype1 进行安装、
安装失败,如下图
解决办法,
1、到指定的网址下载对应的软件安装即可
2、直接下载库文件安装, 推荐在:(python库下载地址(库很丰富,下载速度也很快):http://www.lfd.uci.edu/~gohlke/pythonlibs)
安装方式:cd 到文件所在路径,然后执行 命令 pip install 文件名 具体如下:
启动 Java 虚拟机
并执行简单java程序
如下代码:
# FileName : JpypeDemo.py # Author : Adil # DateTime : 2018/4/12 17:40 # SoftWare : PyCharm import jpype from time import * # 获取虚拟机路径 jvmPath = jpype.getDefaultJVMPath() # jpath = r'D:SProgramJavaJdk8jreinserverjvm.dll' # 可见 获取jvmPath 与 jpath 一样。 print(jvmPath) # D:SProgramJavaJdk8jreinserverjvm.dll # 启动虚拟机 jpype.startJVM(jvmPath) # 判断虚拟机是否启动 print(jpype.isJVMStarted()) # 调用java程序,执行打印 jpype.java.lang.System.out.println("hello JPype !") # 关闭虚拟机 jpype.shutdownJVM() sleep(5) print(jpype.isJVMStarted())
使用java 中的对象
jpype还支持直接使用编译后的class文件,省去了编译这一环节。
以下是原来的JAVA测试代码
package com; public class JavaDemo { String value; public JavaDemo(String value) { this.value = value+" Java"; } public String getValue() { return this.value; } public void say() { System.out.println("hello java"); } public static void main(String[] args) { System.out.println("hello world"); } }
使用 java 编译命令 在当前路径下进行编译,生成class 文件,执行 javac ***.java
python 使用class 文件代码
# FileName : jpype.py # Author : Adil # DateTime : 2018/4/12 19:16 # SoftWare : PyCharm import jpype jvmPath = jpype.getDefaultJVMPath() # 获得系统的jvm路径 # 启动虚拟机 if not jpype.isJVMStarted(): jpype.startJVM(jvm=jvmPath) # 使用JAVA字节码中定义的类,注意包名 javaClass = jpype.JClass('com.JavaDemo') # 实例化对象 javaInstance = javaClass('test') #调用JAVA对象的方法 print (javaInstance.getValue()) javaInstance.say() # 关闭jvm jpype.shutdownJVM()
python 引入jar包,代码如下:
# FileName : GetMd5.py # Author : Adil # DateTime : 2018/4/12 20:28 # SoftWare : PyCharm import os.path import jpype class Md5(object): def __init__(self): self.jvmPath = jpype.getDefaultJVMPath() self.fileDir = os.path.realpath(__file__) # 获取 jar包路径 self.jarPath = os.path.split(self.fileDir)[0] + r'jmeter-md5.jar' print(self.jarPath) # 拼接 执行jar 包的路径 self.exejar = '-Djava.class.path=' + self.jarPath def getMd5(self,md): # 启动 jvm 并执行jar 包 jpype.startJVM(self.jvmPath,self.exejar) # 实例化 改jar包中的类 JDClass = jpype.JClass("com.jmeter.md5.GenerateMd5") # jprint = jpype.java.lang.System.out.println # 使用改类的方法 md5 = JDClass.createMD5(md) # jprint ('5555') # 关闭虚拟机 jpype.shutdownJVM() return md5
此例中,同时还使用了JAVA虚拟机启动时的命令行参数,可以订制启动方式
总之
jpype提供了强大而灵活的JAVA虚拟机接口,使得Python的扩展性进一步提升,Python的优雅语法,配上JAVA的工程化性能,可以使开发更加高效。