Python -- jpype JVM的第三方庫使用


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:\SProgram\Java\Jdk8\jre\bin\server\jvm.dll'

# 可見 獲取jvmPath 與 jpath 一樣。
print(jvmPath)  # D:\SProgram\Java\Jdk8\jre\bin\server\jvm.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的工程化性能,可以使開發更加高效。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM