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

134 天前
 Haku

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

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

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

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

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

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

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

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

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

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

© 2021 V2EX