You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jython从Java调用含第三方模块的Python脚本遇ImportError问题

问题根源

你使用的jython-standalone 2.7.2是基于Python 2.7的Java实现解释器,和你系统中安装的Python3环境完全独立:

  • 你通过系统pip安装的pandas是针对Python3的,Jython根本无法识别
  • 更关键的是,pandas这类依赖CPython底层扩展的库,本身就不兼容Jython环境,即使强行安装也大概率无法正常运行
解决办法

优先推荐方案一,这是Java调用Python3第三方库最稳定的方式:

方案一:通过Java的ProcessBuilder调用系统Python3进程

直接调用你已经装好pandas的Python3环境执行脚本,完全绕开Jython的兼容性问题。

修改App.java代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class App {
    public static void main(String[] args) {
        try {
            // 启动系统Python3进程执行脚本(Windows下如果python3命令无效,换成python或完整路径如C:/Python39/python.exe)
            Process process = new ProcessBuilder("python", "./src/main/resources/hello.py").start();
            
            // 读取脚本正常输出
            BufferedReader outputReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = outputReader.readLine()) != null) {
                System.out.println("脚本输出:" + line);
            }
            
            // 读取脚本错误输出(排查问题用)
            BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
            while ((line = errorReader.readLine()) != null) {
                System.err.println("脚本错误:" + line);
            }
            
            process.waitFor();
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

修改hello.py脚本

让脚本直接输出可被Java解析的格式(比如JSON):

import pandas as pd
import json

def get_data():
    data = {'name': ['John', 'Emily'],
            'age': [30, 40]}
    df = pd.DataFrame(data)
    return df

if __name__ == "__main__":
    # 将DataFrame转为JSON格式输出,方便Java后续解析处理
    print(json.dumps(get_data().to_dict(orient='records')))

调整pom.xml

直接移除jython的依赖,不需要再引入它。


方案二:强行尝试Jython安装pandas(不推荐)

如果非要用Jython,需要用Jython专属的包管理工具安装,且成功率极低:

  1. 下载Jython版本的pip-jython脚本
  2. 执行命令:jython pip-jython install pandas
  3. 大概率会失败,因为pandas依赖的numpy等库无法在Jython环境中编译运行
总结

Java调用带第三方库的Python脚本,最可靠的方式就是直接调用系统Python进程,Jython仅适用于无特殊依赖的Python2脚本场景。

内容的提问来源于stack exchange,提问作者LetsCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 13:18:09