如何在Java中执行Python模块?从认识JEP库开始

article/2025/10/3 19:24:14

让我们从认识JEP库开始。

关注《Java学研大本营》

本教程基于带M1芯片的macOSX,用于Python 3.8/3.9和Java 11。

介绍

从我的实践来讲,我遇到的上一个挑战是,当基础应用引擎是Java的时候,我按常理应该添加一个新的机器学习功能。但是,这里的关键却是,ML功能是在Python里面。

那么我们要怎么做呢?我们应用什么样的解决方案来完成这个任务?

其中一个工作方案是在docker中运行这个服务。或者我们可以找到另一个更有效的有利于生产的解决方案:通过Jep库(Java Embedded Python)直接从Java代码中执行python代码。

什么是JEP库?

下面是GitHub上的FAQ中的一些引文。

Jep使用JNI和CPython API来启动JVM中的Python解释器。当你在Java中创建一个Interpreter实例时,将为该Java Interpreter实例创建一个Python解释器,并保留在内存中,直到用Interpreter.close()关闭该Interpreter实例。

由于需要管理一致的Python线程状态,创建Interpreter实例的线程必须在对该Interpreter实例的所有方法调用中重复使用。

这里有一个关于Python模块执行的评论。

Jep应该与任何纯Python模块一起工作。它可以与各种CPython扩展一起工作。开发人员报告说,Jep可以与NumPy、Scipy、Pandas、TensorFlow、Matplotlib、cvxpy等一起工作。

速度性能是一个至关重要的指标,特别是当你的应用程序处理大数据时。我在研究中的测试表明,使用JEP几乎是纯粹的python执行。

如何为你的项目设置JEP?

假设你的系统里有Java(Maven)和Python。在Java项目中,在pom.xml文件中,你设置了一个依赖项。

在项目终端运行。

mvn clean install
or
mvn clean install -DskipTests

你在Java中安装了JEP!

要在Python中安装JEP,运行:

pip install jep 

该命令安装最新的JEP版本。如果你需要,你可以指定一个特定的JEP版本。在我的例子中,我使用JEP 4.0.3版本。

这里的版本不兼容是实质性的。你将采取的Python版本和Jep库版本越低,你将使用越复杂的java语法(反之亦然)。但是最新的JEP版本可以轻易地执行JEP旧版本的语法。

在你的系统中,必须要设置一个环境变量。对于macOSX,就像在终端运行一样。

export DYLD_LIBRARY_PATH="<your_user>/myenv/lib/python3.8/site-packages/jep"$DYLD_LIBRARY_PATH

不要忘了在你的~/.zshrc文件中加入同样的一行! JEP在macOS上寻找libjep.jnilib文件,在Linux上寻找libjep.so文件。

除此之外,对于Linux系统,它将是一个不同的环境变量名称。

export LD_LIBRARY_PATH="<your_user_path>/myenv/lib/python3.8/site-packages/jep"$LD_LIBRARY_PATH

你设置了JEP库。现在你可以直接从Java中执行Python。

Python 3.8 macOSX M1芯片的语法

首先,我们应该定义JEP库的路径 (特别是Java将在哪里搜索Python来执行),并初始化MainInterpreter对象。

import jep.*;
import jep.MainInterpreter;import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;String pythonFolder = System.getenv("DYLD_LIBRARY_PATH");//define the JEP library path
String jepPath = pythonFolder + "/jep/libjep.jnilib";if (!Files.exists(Path.of(jepPath))){            jepPath = pythonFolder + "/jep/libjep.so";        
}
//initialize the MainInterpreter   
MainInterpreter.setJepLibraryPath(jepPath);

然后,设置JEP的配置(我们应该把Python库添加到操作和我们的项目文件夹中)。然后,创建一个SharedInterpreter对象。一个SharedInterpreter将直接执行Python代码或Python执行文件。

jep.JepConfig jepConf = new JepConfig();   jepConf.addIncludePaths("/Users/galinablokh/Documents/POCNerClassificationSDK/src/main/java");    jepConf.addIncludePaths(pythonFolder);SharedInterpreter.setConfig(jepConf);SharedInterpreter subInterp = new SharedInterpreter();
view raw setUpJepConfig.java hosted with ❤ by GitHub

我有一个Python文档,有两个简单的函数来检查JEP的工作。一个函数应该使用本地Python库来搜索目录中的特定文件。第二个函数调用更复杂的Python库,Spacy。确保你在Jep运行之前在Python中安装了Spacy库和下载的模型。

import glob
import osimport spacydef get_c_path(pathlib, extension):path_list = glob.glob(f'{pathlib}/' + f'{extension}')return path_listdef run_spacy_nlp(sentence):nlp = spacy.load("en_core_web_sm")doc = nlp(sentence)return [(token.text, token.lemma_, token.pos_, token.tag_,token.dep_, token.shape_, token.is_alpha, token.is_stop) for token in doc]

现在,让我们从 Java 中运行 Python 文档函数。

// run function from the python_functions.py document
subInterp.eval("import python_functions as p");subInterp.eval("res_spacy = p.run_spacy_nlp('Apple is looking at buying U.K. startup for $1 billion')");ArrayList result = (ArrayList) subInterp.getValue("res_spacy");for (Object item:result) {System.out.println(item.toString());}

输出的结果是。

>>> [Apple, Apple, PROPN, NNP, nsubj, Xxxxx, true, false]
>>> [is, be, AUX, VBZ, aux, xx, true, true]
>>> [looking, look, VERB, VBG, ROOT, xxxx, true, false]
>>> [at, at, ADP, IN, prep, xx, true, true]
>>> [buying, buy, VERB, VBG, pcomp, xxxx, true, false]
>>> [U.K., U.K., PROPN, NNP, dobj, X.X., false, false]
>>> [startup, startup, VERB, VBD, dep, xxxx, true, false]
>>> [for, for, ADP, IN, prep, xxx, true, true]
>>> [$, $, SYM, $, quantmod, $, false, false]
>>> [1, 1, NUM, CD, compound, d, false, false]
>>> [billion, billion, NUM, CD, pobj, xxxx, true, false]

这真是太棒了! 我们可以直接从 Java 中调用和执行 Python! 但是等等,我在文章开头提到的其他Python版本的语法怎么办?

Python 3.9 macOSX M1芯片的语法

我之前说过,Python和Jep版本越高,Java的语法就越简单。之所以如此,是因为在Python 3.9以上版本的最新Jep版本中,JEP开发者在执行 "pip install jep "时增加了对Python路径的自动搜索。让我们看看下面的语法!

// set path for jep executing python3.9
MainInterpreter.setJepLibraryPath(jepPath);// set path for python docs with python script to run
jep.JepConfig jepConf = new JepConfig();
jepConf.addIncludePaths(System.getProperty("user.dir")+"/src/main/java/");//create the interpreter for python executing
Interpreter subInterp = jepConf.createSubInterpreter();

四行代码,我们就有了一个Java中的Python3.9解释器! 现在你将看到如何运行你已经看过的文档中的Python函数。

//import  .py doc with to run
subInterp.eval("import python_functions as p");// run each function from the .py doc I
subInterp.eval("res_spacy = p.run_spacy_nlp('Apple is looking at buying U.K. startup for $1 billion')");
System.out.println(subInterp.getValue("res_spacy"));//II
subInterp.eval("res_c = p.get_c_path('.idea','*.xml')");
System.out.println(subInterp.getValue("res_c"));

打印结果将与Python 3.8版本的相同。

结论

在本教程中,你得到了关于如何从任何Java应用程序中执行Python 3.8和Python 3.9版本的Python代码的清晰说明。

文章中的所有代码例子你都可以在macOSX M1芯片和Linux上运行。你只需要为每个系统正确设置Jep库即可。

参考:

  1. Jep library GitHub(https://github.com/ninia/jep)

  2. My GitHub project with code examples(https://github.com/Galina-Blokh/jep-java-python)

  3. https://medium.com/geekculture/how-to-execute-python-modules-from-java-2384041a3d6d

推荐书单

《Java编程讲义》

购买链接:https://item.jd.com/13495830.html

《Java编程讲义》根据目前Java开发领域的实际需求,从初学者角度出发,详细讲解了Java技术的基础知识。

全书共15章,包括Java开发入门,Java语言基础,Java控制结构,数组,面向对象编程,继承和多态,抽象类、接口和内部类,异常处理,Java常用类库,集合与泛型,Lambda表达式,输入-输出流,多线程,JDBC数据库技术,网络编程等内容。内容全面覆盖.Java开发必备的基础知识点,结合生活化案例展开讲解,程序代码给出了详细的注释,能够使初学者轻松领会Java技术精髓,快速掌握Java开发技能。

《Java编程讲义》适合作为高等院校相关专业的教材及教学参考书,也适合作为Java开发入门者的自学用书,还可供开发人员查阅、参考。

精彩回顾

深入理解Docker网络通信原理

详细&全面的RxJava架构原理与设计讲解

Java面试宝典大集锦


http://chatgpt.dhexx.cn/article/yqL11Pt3.shtml

相关文章

JEP 290 初识

JEP 290 初识 全局过滤器自定义过滤器内置过滤器 JEP 290是 oracle提供已一套JAVA反序列化机制&#xff0c;其并不是一种必须被强制执行的策略&#xff0c;而是需要程序员或者运维人员进行开发与启用。关于该机制的优缺点借用老外的一篇文章 https://dzone.com/articles/a-firs…

jep 使用方法与简介

1什么是jep JEP是Java expression parser的简称&#xff0c;即java表达式分析器&#xff0c;Jep是一个用来转换和计算数学表达式的java库。通过这个程序包&#xff0c;用户可以以字符串的形式输入一个、任意的公式&#xff0c;然后快速地计算出结果。Jep支持用户自定义变量、常…

那些人工智能明星公司都在搞什么?

事件&#xff1a;全球机器学习技术大会 时间&#xff1a;2021年1月13-14日 地点&#xff1a;金茂北京威斯汀大饭店 画外音&#xff1a;文末送所有PPT。 大会特邀近40位机器学习领域的技术领袖和行业应用专家&#xff0c;与1000来自电商、金融、汽车、智能制造、通信、工业互联网…

中国人工智能公司CIMCAI世界港航AI领军企业,自动化港口数字化码头,智能闸口各箱面箱况残缺检测视频流动态感知中国人工智能公司

中国人工智能公司CIMCAI世界港航AI领军企业&#xff0c;自动化港口数字化码头&#xff0c;智能闸口各箱面箱况残缺检测视频流动态感知&#xff0c;智能化港口码头数字化。CIMCAI已完成全球250万人工智能集装箱箱况检验&#xff0c;完成全球上亿集装箱信息&#xff0c;先进产品在…

外媒评选出来的中国五大人工智能(AI) 公司

https://www.toutiao.com/a6656628348795486727/ 2019-02-11 14:37:43 全球三分之二的人工智能投资正在进入中国市场&#xff0c;仅去年一年就帮助人工智能行业增长了67&#xff05;。 中国科技行业最近宣布了其前50家人工智能公司。其中包括14只“独角兽”--估值为10亿美元或…

【研究】那些人工智能公司现在发展到哪一步了?

作者&#xff1a;欧应刚 | 小编&#xff1a;小葱 近期&#xff0c;为了撰写《2018中国人工智能应用与生态研究报告》&#xff0c;中国软件网对我国人工智能产业应用和平台、生态建设进行了调研&#xff0c;以下是部分调研结果&#xff0c;更多内容见报告完整版。 1.已经有相当…

全球最强人工智能创新公司Top100榜单重磅发布!

自2012年至现在&#xff0c;名单上的100家跟人工智能相关的创业公司在367笔交易中累计融资总额达到117亿美元。以下是2017年的AI 100名单列表。 今天CB insights公布了第二个年度AI 100&#xff0c;即2018 AI 100 名单&#xff0c;如下图所示&#xff0c;这是其中100家最有希望…

2017-2020年人工智能公司死亡名单

▼ 更多精彩推荐&#xff0c;请关注我们 ▼ 有浪潮就有泡沫&#xff0c;有泡沫就有死亡。 被称为继移动互联网之后又一次个重要技术爆炸的人工智能&#xff0c;从者如云。从2017年以来&#xff0c;又有多少人工智能公司在浪潮中诞生&#xff0c;又有多少公司在浪潮中死亡&#…

AI公司--国外知名公司

微软、Facebook、IBM、迪士尼、亚马逊、Adobe 波士顿动力 波士顿动力成立于1992年&#xff0c;当时属于麻省理工学院&#xff0c;后被Alphabet收购。去年&#xff0c;软银从Alphabet手中收购了波士顿动力公司。软银通过自己的愿景基金&#xff0c;在机器人领域进行了大量投资。…

在国内人工智能领域,你最看好哪一家公司?

在人工智能的各个细分领域&#xff0c;除了微软、google、BAT这样的巨头&#xff0c;还有许多世界领先、拥有各自黑科技的中国企业&#xff0c;它们之中&#xff0c;有些正在成长为独角兽&#xff0c;有些已经成为了投资者的关注对象。 语音之王&#xff1a;科大讯飞 黑科技&…

一图看清美国最具前景的50家人工智能公司

近期&#xff0c;福布斯&#xff08;Fobes&#xff09;杂志与Meritech Capital合作发布了美国最具前景的50家人工智能公司榜单。榜单中的公司均为非上市创业公司&#xff0c;累计融资68亿美元&#xff0c;总估值达到267亿美元。 从业务领域来看&#xff0c;上述50家公司主要分布…

欧洲估值最高的5家人工智能创业公司

来源&#xff1a;资本实验室 今年初&#xff0c;据伦敦风险投资公司MMC的调查&#xff0c;四成自称为人工智能公司的欧洲创业公司实际上并未在核心业务中涉及到人工智能&#xff0c;人工智能仅为吸引投资的漂亮外衣。 这一数据发布后&#xff0c;激起了轩然大波&#xff0c;不仅…

『科技』2019全球最有前景AI公司TOP100|湾区人工智能

来源:eet-china I,人工智能学家 整理&#xff1a;弗锐达 引言&#xff1a;硅谷最强智库之一的CB Insights发布AI 100 2019报告&#xff0c;在全球范围内评选出了100家“最有前景”的AI创业公司&#xff0c;其中中国公司有6家&#xff0c;分别是…… 日前&#xff0c;硅谷最强智…

人工智能商业应用,并介绍详细公司案列

目录 1. 推荐系统&#xff1a;2. 智能广告和营销&#xff1a;3. 聊天机器人和虚拟助手&#xff1a;4. 自动化和机器人化&#xff1a;5. 数据分析和预测&#xff1a;6. 机器视觉和图像识别&#xff1a;7. 金融科技&#xff08;FinTech&#xff09;&#xff1a;8. 医疗诊断和健康…

人工智能公司排名

人工智能为远程教育的智能化提供了有力的技术支撑。格物斯坦认为&#xff1a;通过运用专家系统、自然语言处理、人工神经网络、机器学习等技术&#xff0c;跟踪学习者的思维路径及其解决问题的潜在目标结构&#xff0c;诊断和评估学习者的理解域&#xff0c;对学习者提供及时的…

【人工智能】AI 公司:DeepMind 公司传

人工智能公司:DeepMind 公司传 文章目录 人工智能公司:DeepMind 公司传一、创立初期1.1 创始人背景二、细分领域与研究突破2.1 DQN(Deep Q-Network)2.2 AlphaGo2.3 StarCraft II三、与谷歌的合作及收购3.1 数据中心节能3.2 AI助手和自然语言处理四、致力于应用和道德4.1 应…

人工智能企业全球一百强,中国6家上榜,5家在北京

https://www.toutiao.com/a6702387319824974339/ 数据显示&#xff0c;截至2018年&#xff0c;北京人工智能企业数达到1070家&#xff0c;占全国人工智能企业数超过四分之一&#xff1b;人工智能企业全球一百强中&#xff0c;我国有6家&#xff0c;5家在北京。我国人工智能领域…

高等数学(同济第七版上)课后习题及解答

高等数学(同济第七版)课后答案解析答案&#xff0c;部分截图如下 太多了&#xff0c;就不在一一复制&#xff0c;可以扫描下方二维码&#xff0c;关注微信公众“数据结构和算法”&#xff0c;回复高等数学的拼音简称gdsx即可获得下载地址

高等数学同济第七版课后答案上册

高等数学同济第七版课后答案上册 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/185C8RB4Y9pYO84V4Rup1Wg 提取码&#xff1a;p7o4 如果链接失效扫一扫右侧&#xff0c;回复 高等数学答案 即可免费获取 百度文库所有文档原格式下载方法 回复 文库免费下载 …

高等数学第七版下册 同济大学数学系 编 课后答案 习题解析

高等数学第七版上册 同济大学数学系 编 课后答案 习题解析 原文链接 第八章 向量代数与空间解析几何第九章 多元函数微分法及其应用第十章 重积分第十一章 曲线积分与曲面积分第十二章 无穷级数考试复习重点