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

157 天前
 Haku

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

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

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

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

4264 次点击
所在节点    Python
77 条回复
Haku
157 天前
对了还有个要求,不准直接带来或者改变服务器上的 python 环境。这个也是个坑点,导致我们也没法直接部署 python 代码而使用了 exe 让它可以脱离环境使用。
vicalloy
157 天前
进程间通信总共也就这么几种方法。要不你们用共享内存吧。
lujiaxing
157 天前
啥? 这算啥问题, 调 py 脚本难道不就是命令行不就完了么?
Haku
157 天前
@lsk569937453 差不多是这样的,很离谱但是就是如此。
yushenglin
157 天前
有任务队列么,封装一个订阅任务区处理
sujin190
157 天前
@Haku #17 不可以开端口,难道也不可以开 pipe 么?还有 IPC 通信共享内存什么的吧,也没说一定要使用网络才能搞 RPC ,windows 还有更变态的直接用进程 ID 远程写进程内存然后通过内核信号量通知进程执行远程调用的
Haku
157 天前
@nagisaushio 这个我不太熟悉,我看看哈
Ayanokouji
157 天前
容器也不行吗
nagisaushio
157 天前
@Haku "不准直接带来 python 环境"什么意思,我把依赖库打包成 zip 算吗?
Haku
157 天前
@lujiaxing 部署服务器上没有我们需要的 python 环境,所以跑不动 py 脚本。
@sujin190 pipe 这块不太熟,我看看哈。共享内存已经在考虑了。
Haku
157 天前
@nagisaushio 不解压就不算,解压哪怕用了虚拟环境也不行。
Haku
157 天前
@yushenglin 这个其实也算可以,不过被使用方否决了,
@Ayanokouji 我记得和容器通信需要搞端口映射吧,因为最终还是要给 java 进程用的,java 进程不是我们写的,所以这个也不让用。
thinkershare
157 天前
每个操作系统都有自己原生的多进程通讯模式,将你的 java/python 搞成多进程架构就行,Java 这边做主进程,负责管理和分发任务给 python 这边。python 是一定需要虚拟机的,不用虚拟机的 python 基本上啥也干不了,没几个库兼容,所以就将环境全部打包进入好了。
Ayanokouji
157 天前
@Haku java 不是你们写的,就难办了,graalvm 估计调用方也不会用,还要安装新的 jdk 环境,按这描述只能进程间通信了吧
Ayanokouji
157 天前
@Haku 我说的容器,当成 k8s 里边的 pod 理解,把 java 和 python 放到一个 pod 里边,docker 的话就是一个 compose ,设置下网络策略。在一个 pod 里边用 http 访问。不过按你这描述,容器应该也不会让你们用。
Haku
157 天前
@Ayanokouji 理解了。这样确实不行,java 那边不会挪窝的,我们这边最多就是提供点 jar 包做层封装让他们不直接接触 python 这边的东西。
NessajCN
157 天前
你们编的啥安全策略还禁 localhost 访问的?需要特意改安全策略才允许 localhost 端口访问?
Haku
157 天前
@NessajCN 是你可以访问,但是你访问前要给安全过一堆检查,还要写申请,开策略。是“非技术”方面的禁止而非“技术”方面的。但是你不涉及任何网络方面的东西的话,以上冗杂的流程就没了,而目前就是希望别走这个流程。
mightybruce
157 天前
那么多 IPC 的通信方式, 你选一种就行。 简单点就是 unix domain socket, 复杂点搞共享内存、POSIX 消息队列。像这种通信有很多开发库都封装了,比如 zeromq , 自己多试试吧。
hellomsg
157 天前
给 zfu 外包吗?这么奇葩

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

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

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

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

© 2021 V2EX