问题陈述
我有一段java代码,希望在python里跑一跑。(其实也可以改写代码到python,懒癌)
当前没有打jar包,只是调用函数。
为什么选py4j而不是jpype? 参考
上面的博主说:jpype 和 py4j 有相同的核心开发者,后者的出现是因为开发者认为 jpype 的底层架构不够好,py4j是更好的版本。
更新
2020/7/8
之前使用py4j包,要求java程序要先于python程序运行,且调用函数耗时很多。改用jpype,打包成jar再使用,时间消耗变成原来的1/66。我写的jpype小实例
安装
python部分
pip install py4j
我在anaconda的虚拟环境装的,此时py4j包对应的jar包,在
C:\Users\Dell.m2\repository\net\sf\py4j\py4j\0.10.9
配置Eclipse
在java项目上引入该java包。比如普通java项目,添加到Referenced Libraries
如果是maven项目,修改pom文件。这里我的版本号是跟pip安装的一致的。不清楚版本号的,去maven市场 这里 查。
<dependency>
<groupId>net.sf.py4j</groupId>
<artifactId>py4j</artifactId>
<version>0.10.9</version>
</dependency>
实例
java代码
package test;
import py4j.GatewayServer;
import java.util.Random;
public class BM {
// 这里写你自己的函数...例如
public static int matchTest(String a, String b) {...}
public static void main(String[] args) {
BM app = new BM();
GatewayServer gs = new GatewayServer(app);
gs.start();
System.out.println("BM started!");
}
}
python代码
from py4j.java_gateway import JavaGateway
def test_search(raw, target):
gateway = JavaGateway()
# 这个matchTest()函数就是java里的那个函数
return gateway.entry_point.matchTest(raw, target)
执行
先在eclipse里运行java程序,然后执行python程序,即可。