目录
前言
写这篇文章之前一直被一个BUG困扰,之前在Python开发的SQL血缘解析得到项目。我们知道Python的语言特性决定了它在开发方面的快速和效率,但是现在很多平台和服务还是在JAVA基础之上。使用Python开发完脚本之后一些要求还需要能够集成到JAVA平台里面去,转成jar包提供服务。那么这里的运用场景就是如何在JAVA里面调用Python脚本,而且平常情况下Python的脚本使用的第三方库还是挺多的,这里会存在很多种版本冲突或者是不兼容的问题。
在网上搜寻一番后发现大多人使用的是Jython,这个框架还是有些年头的好久没更新了。今天试了一下效果是有的但是还是存在很多种问题。并且网上关于Jython的详细方法运用还是比较少而且不全面,对于这部分要使用到项目上还是要有个详细的认知最负责。故作此篇,若有不尽人意的地方请在评论区里提出,博主会长期维护自己的文章,谢谢各位的支持!
一、Jython简介
Jython项目提供了Java中Python的实现,为Python提供了在JVM上运行和访问Java编写的类。当前版本(Jython 2.7.x)仅支持Python 2,目前写这篇文章的最新版本到了2.7.3了。这也没有办法,我看作者17年写到2.7之后道现在为止5年了还没有支持到Python 3.毕竟是人家的开源项目也不太好说什么,程序员都忙。那么这里我们需要明白到一点也是后续影响这个Python脚本的:
最新版本Jython2.7.3仅支持Python2.7。那么如果我们的Python脚本里面使用到的一些代码或者是第三方库不兼容Python2.7版本的话,就会报错。如:
这里就因为sqlparse的最新版本仅支持3.5以上的版本,到Jython里面运行就会导致符号识别问题报错。
那么如果我们要考虑用到Jython的话就不得不考虑你开发的Python脚本是否在Python2.7的版本下也能正常运行。
1.场景
- 嵌入式脚本-Java程序员可以将Jython库添加到他们的系统中,以允许用户编写简单或复杂的Python脚本,为应用程序添加功能。
- 交互式实验-Jython提供了一个交互式解释器,可用于与Java包或运行的Java应用程序交互。这允许程序员使用Jython来实验和调试任何Java系统。
- 快速应用程序开发——Python程序通常比等效Java程序短2-10倍。这直接转化为程序员生产力的提高。Python和Java之间的无缝交互允许开发人员在开发过程中和产品交付过程中自由地混合这两种语言。
2.下载
直接去官网下载就好了Home | Jython,若是下载有困难的可以联系博主,已经把资源上传至CSDN了。
下载完点击即可安装,添加一下下载路径到环境变量:
%Jython_HOME%\bin;%Jython_HOME%\Lib
系统变量:
其中Doc文件中是有关于查询Jython类功能的网页:
二、运用示例
构建Maven项目
引入pom,添加依赖:
<dependencies>
<dependency>
<groupId>org.python</groupId>
<artifactId>jython-standalone</artifactId>
<version>2.7.3</version>
</dependency>
</dependencies>
构建java,运行python语句:
import org.python.util.PythonInterpreter;
public class HelloPython {
public static void main(String[] args) {
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("print('Hello python')");
}
}
运行python脚本:
python脚本:
print('Hello python')
JAVA代码:
import org.python.util.PythonInterpreter;
public class HelloPython {
public static void main(String[] args) {
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("D:\\Jython\\test.py");
}
}
运行带有第三方库的Python脚本
这里大家看了上面的内容就知道一定要兼容2.7一下的版本的第三方库:
比如我跑一个仅支持py3.5以上版本的第三方库:
import org.python.core.Py;
import org.python.core.PySystemState;
import org.python.util.PythonInterpreter;
public class HelloPython {
public static void main(String[] args) {
PythonInterpreter interpreter = new PythonInterpreter();
PySystemState sys = Py.getSystemState();
sys.path.add("D:\\anaconda3\\Lib\\site-packages");
interpreter.execfile("D:\\pythonProject\\main.py");
}
}
就报了格式问题错误了,2.7和3.x以上的版本关于字符设定的差异还是很多的。
很多python的第三方库都逐渐的放弃了python2了,比如pandas和numpy:
我建议如果一定要做JAVA的脚本还是创建一个Python2.7的环境用于压测。
转为jar包
将需要转换的python文件也放在安装的jython目录下面,直接将编写好的JAVA代码转成jar就好了。2.7版本已经没有jythonc了取而代之的是jython -jar,需要归档没有这个必要。
点关注,防走丢,如有纰漏之处,请留言指教,非常感谢
以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见
今天的文章java如何调用python的.py程序_Java调用Python「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/82973.html