如何使用 Jpype 和 Pyjnius 在 Python 中调用 Java?

2025 年 3 月 7 日 | 阅读 4 分钟

在当前计算的大多数方法中,经常会发现需要接口连接两个或多个编程语言,特别是为了利用某种语言在处理特定问题时提供的优化功能。例如,Java 在面向对象能力方面非常强大,而 Python 则因其毫不妥协的易用性和创建代码的速度而广受欢迎。这两种语言的结合通常非常有益,而 Jpype 和 Pyjnius 是实现这一目标的两个极其有价值的工具。

在本文中,您将学习如何使用 Jpype 和 Pyjnius 从 Python 调用 Java:它们的安装和用法。

Jpype:Python 和 Java 之间的无缝桥梁

Jpype 是一个 Python 模块,它允许您从 Python 程序中调用 Java 函数。它通过在 Python 进程内启动 Java 虚拟机 (JVM) 来工作,从而允许直接访问 Java 库。

Jpype 的主要特点

  • 直接访问 Java 库:您可以访问所有 Java 库,包括第三方库。
  • 无缝集成:Jpype 使用 Python 的原生语法与 Java 交互,降低了学习曲线。
  • 自动类型转换:Jpype 自动处理基本数据类型转换(例如,int、float、string)。

安装

要开始,您首先需要安装 Jpype。您可以使用 pip 轻松完成此操作

基本用法

安装后,Jpype 使调用 Java 代码变得简单直观。下面是如何从 Python 调用 Java 类的示例

文件:sample.py

输出

 
List contains: [Python, Java]   

说明

在此示例中,Java `ArrayList` 在 Python 中被创建和操作。Jpype 通过允许 Python 代码直接实例化和使用 Java 对象来实现这一点。

Jpype 的优点

  1. 支持复杂库:它适用于处理复杂的 Java 库或应用程序。
  2. 高性能:因为它将 Java 虚拟机 (JVM) 嵌入到 Python 中,所以它在大项目上提供了良好的性能。

Jpype 的缺点

  1. JVM 开销:在 Python 中启动 Java 虚拟机 (JVM) 可能会消耗大量资源。
  2. 设置复杂:对于大型项目,配置 Jpype 和处理与 JVM 相关的可能很棘手。
  3. 多线程限制:在 Python 中处理多线程 Java 应用程序时存在限制。
  4. Java 依赖:它需要正确配置的 Java 环境,这可能对某些用户来说是一个额外的障碍。

Pyjnius:Java-Python 互操作的轻量级解决方案

Pyjnius 是另一个 Python 库,它允许从 Python 调用 Java 类,专注于易用性和简洁性。与 Jpype 在 Python 中启动 JVM 不同,Pyjnius 通过使用 JNI(Java Native Interface)直接与 Java 接口。

Pyjnius 的主要特点

  • 轻量级:与 Jpype 相比,Pyjnius 更轻量级,非常适合简单的项目。
  • 直接类访问:使用 `autoclass`,您可以直接在 Python 中访问和实例化 Java 类。
  • 基于 JNI:Pyjnius 使用 JNI,使其在跨语言调用方面效率很高,但在处理大规模 Java 库时更具挑战性。

安装

与 Jpype 一样,也可以使用 pip 安装 Pyjnius

基本用法

这是一个简单的示例,演示如何使用 Pyjnius 调用 Java 类

文件:sample.py

输出

 
HELLO FROM JAVATPOINT!   

说明

  • 此代码段演示了 `autoclass` 的使用,它允许您在 Python 中导入和使用任何 Java 类。在这里,我们正在创建一个 Java `String` 对象并调用其 `toUpperCase` 方法。

Pyjnius 的优点

  1. 无需 JVM 管理:Pyjnius 不需要显式管理 JVM;它在内部处理。
  2. 适用于 Android:它在 Android 开发中特别有用,其中需要从 Python 访问 Java 方法。

Pyjnius 的缺点

  1. 复杂应用程序性能较低:Pyjnius 在大型、复杂的 Java 应用程序中可能在性能方面遇到困难。
  2. 手动类型处理:它不自动处理 Python-Java 类型转换,需要更多手动工作。
  3. Java 功能有限:Pyjnius 更适合简单的用例,可能不支持完整的 Java 高级功能。
  4. JNI 复杂性:基于 JNI,如果出现 Java 类或 JNI 兼容性问题,排查可能需要更多努力。

Java-Python 接口的常见用例

  1. 机器学习:使用 Python 进行 TensorFlow 或 PyTorch 的快速开发,而 Java 处理后端逻辑和数据处理。
  2. 企业应用程序:Java 处理大规模后端操作,而 Python 管理数据分析和自动化。
  3. Android 开发:借助 Pyjnius,Python 可以在 Android 开发中调用 Java 方法,从而实现跨平台移动应用程序。

结论

通过这种方式,借助 Jpype 和 Pyjnius,您可以从两者中学习,并实现非常友好的 Python 和 Java 集成。它们允许强大的跨语言交互,无论是开发复杂的机器学习系统还是开发新的 Android 应用程序。根据项目的复杂性和性能需求选择合适的工具,尽享 Python 和 Java 的优势。