前言
近段时间在做接口的时候就碰上了需要用到Java包内函数以作请求加解密,由于我python和java都贼差,算法看不懂,翻译不出同等作用的python代码,所以不得不向Java屈服(哭泣ing..)虽无法否认Java在处理很多问题上确实比Python要好那么一丢丢,但我们Python也很强呀,身为胶水语言,没有什么是我们Python做不了的事呢~(喂,你很拽哦!)以下,真的不来围观吗~~
Jpype简述
咳咳,其实这一段可以自行谷歌or百度,但作为学习笔记,还是有必要啰嗦一遍~
- Jpype定义
进入Jpype官网 可以看到一段描述:
JPype是允许python程序完全访问java类库的一项行为活动。这不是像Jython/JPython那样通过重新实现Python来实现的,而是通过在两台虚拟机中进行本地级的接口来实现的
简单来说,其实也就是用来克服Python在某些领域上(如服务器端的编程)的不足,方便我们调用Java程序来进行其它开发工作等。
- Jpype与Jython的区别
1)运行环境不同:jython运行在jvm上,而JPype的实际运行环境仍然是python runtime,只是在运行期间启动了一个嵌入的jvm
2)使用者不同:jython是给java程序玩的,JPype是给python程序员玩的
Jpype安装
emmmm,这个安装过程,是大坑,天坑!!(what the … hell :)….)
- 环境准备
我的环境配置是:
1 | Win 7/10 |
PS:python的环境一定要跟java的环境要一致,不然调用jvm时会报内存泄露哟~
- 安装jpype库
使用pip install jpype1进行安装,运行后你会发现,蹭蹭蹭,报错啦!
根据错误提示,是缺少了VS C++插件,我在 Flask-Apache-mod-wsgi-踩坑记 这篇博客上有提到插件的地址,在这里再放一下地址 - > Visual C++编译器下载地址 记得给我点赞哟嘻嘻~
- 再次安装jpype
当你装完插件后,执行pip,仍然报错了,那就试试第二种方法吧~
从网上下载jpype1 相关的库文件,传送门 -> jpype库文件,根据步骤一步步安装,以下:
1)手动安装 wheel
C:\Python36\Scripts>pip install wheel
2)待wheel安装成功后,再次安装已经下载的 JPype1-0.6.2-cp36-cp36m-win_amd64.whl 文件
C:\Python36\Scripts>pip install JPype1-0.6.2-cp36-cp36m-win_amd64.whl
3)成功安装后,尝试运行简单的调用jvm脚本,发现还是有报错
ImportError: numpy.core.multiarray failed to import
4)通过报错可判断可能是缺少了numpy库,再次安装pip install numpy, 安装过慢可以尝试用pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy
进行安装,稍等片刻后,我们再运行调用JVM的脚本
1 | import jpype |
此时运行后,后台没有报错,恭喜啦啦啦你终于成功安装了jpype,然后我们就可以愉快的玩耍了~~~
(ps:如果还是有报错,大家就自行百度相应的报错找解决方法啦,恕我无能为力啦~)
Jpype运用
其实到了这里我都感觉自己不知道可以说啥了,毕竟网上描述jpype使用的教程实在是太多了,而且非常的详细,我就不多说啦,在这里贴下我的实际运用代码,大家可以自行参考下哦~
1 | from jpype import * #引入jpype |
以上就是我常用的代码啦,是不是很简单呢,哈哈哈,主要还是安装过程比较繁琐,要耐心哟~
抛弃Jpype
为啥要抛弃呢?这个问题问得好,陈独秀同学请你坐下~
虽说jpype可以很方便的让我们调用java包方法,但每一次的调用都要启动一次JVM,非常的耗内存和降低了运行效率,因此如果能用python实现java的方法的话,这样就是最好的啦,同时锻炼两种语言能力哟~
由于加解密算法是公司机密,这里就不贴出来啦嘻嘻,希望大家都能用python愉快的工作哟~