项目场景:
项目目的是想在python里面尝试调用JAVA代码去实现一系列的操作,首先想要跑通一个DEMO。在python里面想要跑通一个JAVA文件实现调用以及使用一系列的函数我们首先需要考虑Python拥有哪些库可以实现这个功能。
桥接python和java的方案,更具体来说,是在python里调用java代码的方案,其实也有好几个,
pyjnius
Jpype
javabridge
py4j
jcc
网上查阅发现pyjnius还挺好使的,于是打算将pyjnius作为planA方案,于是开始行动。
问题描述
还真别说一个下午的时间全浪费在修BUG上面了,安装这个库还挺麻烦的,也是因为这些离谱奇怪的BUG让我把这些坑都给记录下来。踩坑真的太浪费时间了,希望以后有兄弟们和我一样踩坑的时候能够搜到我这篇文章顺利解决问题。
问题1:
首先直接在cmd命令提示符里面输入:
pip install pyjnius
不会成功,一般进行到一半就直接报错了超时扔出一大堆关于pip的错误,这些都是由于连接问题导致的,连接不稳定。我建议大家换个源就可以解决:
这个是清华镜像源。
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pyjnius
也可能由于版本问题报错,这里我推荐大家直接去官网上面下载自己python运行环境适配的版本:
pyjnius · PyPI
如果大家登不上去的话可以看看我上传的资源是否对应着大家的编译环境,如果是的话可以直接下载使用,亲测没问题:
pyjnius-1.4.2-cp37-cp37m-win32.whl-Python文档类资源-CSDN下载
下载回来的whl文件,大家下载完之后cd到下载的目录下面直接pip安装就好了。
问题2:
如果是anaconda上使用Jupyter的玩家直接在Environments上面查看自己的pyjnius是否安装完成了就行:
pycharm的玩家直接调用一下就好了。不出以外的话很大的概率会报错,大家可以尝试一下这段代码测试是否成功:
from jnius import autoclass Stack = autoclass('java.util.Stack') stack = Stack() stack.push('hello') stack.push('world') print(stack.pop())
前提是我已经把gcc和cython装好了,这里就报错了: ImportError:DLL load failed。错误
原因分析:
在网上搜索了很多方法解决有关ImportError的问题,有的是pip uninstall pyjnius经过尝试该方法没有用。也重新下了适合的whl文件尝试,仍然没用。只有去官方找答案最靠谱了:
Installation — Pyjnius 1.0a1 documentation
官方说的很清楚了,DLL load failed:找不到模块很大的可能就在于你的Java环境没有配好。
很多人JAVA_HOME环境肯定是配置好了,关键是PATH少了一行:
C:\Program Files\Java\jdk1.7.0_79\jre\bin\server
解决方案:
打开环境变量,在用户环境变量PATH里面加入一行:
%JAVA_HOME%\jre\bin\server;
JAVA_HOME我默认大家都装好了,很简单。
然后是在系统变量PATH里面加上你下载的jdk的bin目录就好了
测试:
PATH: C:\Program Files\Java\jdk1.7.0_79\bin`
问题解决。