请问下 Java 如何调用含有第三方依赖的 Python 项目

2023-12-26 15:58:22 +08:00
 Haku

公司想搞 AI 相关的,但老企业用的全是 java ,结果就是要用 java 调 python 。

目前只能搞成 java 调 python 打包的 exe 。

也想过用 JNI-CPython-Python 的思路,但是解决不了 python 依赖大量第三方库的问题,没法把 python 代码包括第三方依赖一起给打包成 so 文件。

想问问有没有技术大佬有啥解决思路或者方案。

6354 次点击
所在节点    Python
77 条回复
Nooooobycat
2023-12-26 16:01:30 +08:00
Python 这边集成一个 web 框架,HTTP 请求进来的时候调用 AI 相关的逻辑。 这样别说用 Java ,bash shell 调用都行
Haku
2023-12-26 16:03:18 +08:00
@Nooooobycat 这种方案肯定是可行的,但是公司这边这次不让,这次需求上就是不准开端口。
vagusss
2023-12-26 16:03:46 +08:00
暴露 http 接口不行么
Haku
2023-12-26 16:04:51 +08:00
我补充一下,因为上头有要求不开端口(否则会涉及大量的安全策略啥的问题),所以才无奈用的 exe 打包。正常来说跨语言第一反应肯定是走网络通信啥的,
Haku
2023-12-26 16:06:10 +08:00
@vagusss 上头不让干,大头兵只能无奈执行。
Ayanokouji
2023-12-26 16:10:56 +08:00
graalvm 试试,虽然我没用过
nagisaushio
2023-12-26 16:11:06 +08:00
走 unix file socket 也不行么
potatowish
2023-12-26 16:12:55 +08:00
python 轮训数据库、队列,看是否有请求过来,有就处理; java 这边需要请求时就写入到数据库、队列,然后轮训获取响应……
Leon6868
2023-12-26 16:14:36 +08:00
@Haku 监听 127.0.0.1 上的端口,不会暴露到网络
Leon6868
2023-12-26 16:15:58 +08:00
可以看看 RPC 相关的内容
NULL2020
2023-12-26 16:16:09 +08:00
关注下,我司最近也要搞类似的方案

JNI-CPython-Python 这个方案大概是怎样,op 能否细说一下
lingeo
2023-12-26 16:16:23 +08:00
简单一点就是 web server ,优雅点就 grpc 。
Haku
2023-12-26 16:19:25 +08:00
@Ayanokouji 我看看,这个看介绍说不定可以哦
Haku
2023-12-26 16:24:55 +08:00
@NULL2020 如果你的 Python 不涉及第三方库或者你第三方库很简单(没有套娃似的依赖下去),那么你可以把你的 Python 代码通过 c 拓展模块编译成 so 文件,从而可以被 c 调用,而 Java 有 JNI 可以支持你通过 JAVA 来调用 c ,CPython 则负责编写 c 到 python 中间,你要暴露哪些方法出来。这样一来就可以直接由 Java 来调用 python 了。
具体的可以网上搜一下,应该资料也不算少。
而且这种方案一般也比网络方案要快一些,少了很多网络上的开销。但是我找不到第三方依赖的解决办法目前没法用。
nagisaushio
2023-12-26 16:25:56 +08:00
楼主先明确,是 不准 java 和 python 分开多个进程,还是只是不准经 tcp 通信?
Haku
2023-12-26 16:26:59 +08:00
@Leon6868 我们知道不会暴露到网络上,但是领导不知道,也不可能因为我们就改了安全策略。这个不是技术问题。实在是没法解决。┑( ̄Д  ̄)┍
Haku
2023-12-26 16:27:52 +08:00
@nagisaushio 可以分进程,但是不分更好。网络通信是禁止的。
lsk569937453
2023-12-26 16:29:08 +08:00
@Haku 笑死,最后 java 调用完 python ,不还是暴漏 http 接口出去,只不过这个 http 是用 java 实现的???
nagisaushio
2023-12-26 16:29:09 +08:00
@Haku 走 unix socket 也不行吗
lisxour
2023-12-26 16:30:05 +08:00
@Haku #17 那就管道呗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1003544

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX