Skip to main content

Java 运行时环境和 Python 之间的桥梁。

项目描述

https://beeware.org/project/projects/bridges/rubicon/rubicon.png

Rubicon-Java

Python 版本 项目版本 项目状态 执照 构建状态 不和谐服务器

Rubicon-Java 是 Java 运行时环境和 Python 之间的桥梁。它使您能够:

  • 实例化在 Java 中定义的对象,

  • 在 Java 中定义的对象上调用静态和实例方法,

  • 访问和修改 Java 中定义的对象的静态和实例字段,以及

  • 编写和使用在 Java 中定义的接口的 Python 实现。

快速开始

Rubicon-Java 由三个组件组成:

  1. 一个 Python 库,

  2. 一个 JNI 库,以及

  3. 一个 Java JAR 文件。

提供了一个Makefile来编译 JNI 和 JAR 组件。类型:

$ make

编译它们。编译后的输出将放置在构建目录中。

要使用 Rubicon-Java,您需要确保:

  1. 当您启动 Java VM 时,rubicon.jar位于类路径中。

  2. Rubicon 库文件位于动态库发现的某个位置。这表示:

    1. 在 OS X 下,将包含librubicon.dylib的目录放在您的DYLD_LIBRARY_PATH中

    2. 在 Linux 下,将包含librubicon.so的目录放在你的LD_LIBRARY_PATH中

    3. 在 Windows 下…… 某物 :-)

  3. rubicon Python 模块可以添加到 PYTHONPATH中。您可以使用以下方法安装 rubicon:

    $ pip install rubicon-java

    如果这样做,则在设置PYTHONPATH时需要参考系统 Python 安装。

Rubicon 桥从 Java 端开始。导入 Python 对象:

import org.beeware.rubicon.Python;

然后启动 Python 解释器,并运行 Python 文件:

# Initialize the Python VM
String pythonHome = "/path/to/python";
String pythonPath = "/path/to/dir1:/path/to/dir2";
if (Python.start(pythonHome, pythonPath, null) != 0) {
    System.out.println("Error initializing Python VM.");
}

# Start a Python module
if (Python.run("path.of.module") != 0) {
    System.out.println("Error running Python script.");
}

# Shut down the Python VM.
Python.stop();

您指定的PYTHONPATH必须启用对rubicon Python 模块的访问。

然后,在您的 Python 脚本中,您可以引用 Java 对象:

>>> from rubicon.java import JavaClass

# Wrap a Java class
>>> URL = JavaClass("java/net/URL")

# Then instantiate the Java class, using the API
# that is exposed in Java.
>>> url = URL("https://beeware.org")

# You can then call methods on the Java object as if it
# were a Python object.
>>> print(url.getHost())
beeware.org

也可以在 Python 中提供 Java 接口的实现。例如,假设您想创建一个 Swing Button,并且您想响应按钮点击:

>>> from rubicon.java import JavaClass, JavaInterface

# Wrap the Java interface
>>> ActionListener = JavaInterface('java/awt/event/ActionListener')

# Define your own implementation
>>> class MyActionListener(ActionListener):
...     def actionPerformed(self, event):
...         print("Button Pressed")

# Instantiate an instance of the listener
>>> listener = MyActionListener()

# Create a button, and set the listener
>>> Button = JavaClass('javax/swing/JButton')
>>> button = Button('Push it')
>>> button.setActionListener(listener)

当然,除非它在启动 Swing GUI 等的大型应用程序的上下文中,否则此示例代码将不起作用。

测试

运行 Rubicon 测试套件:

  1. 确保java在您的$PATH上,或者将JAVA_HOME环境变量设置为指向 Java Development Kit (JDK) 的目录。

  2. 创建一个 Python 3 虚拟环境,并确保 pip 和 setuptools 是最新的:

    $ python3 -m venv venv
    $ source venv/bin/activate
    (venv) $ python -m pip install --upgrade pip
    (venv) $ python -m pip install --upgrade setuptools
  3. 安装毒物

    (venv) $ python -m pip install tox
  4. 运行测试套件。以下应该在 macOS 和 Linux 上都能正常工作:

    (venv) $ tox -e py

这将编译 Rubicon 库,编译 Java 测试类,并从 Java 环境中运行 Python 测试套件。

文档

Rubicon 的完整文档可以在Read The Docs上找到。

社区

Rubicon 是BeeWare 套件的一部分。您可以通过以下方式与社区交谈:

正如我们的 BeeWare 社区行为准则中所述,我们培养了一个热情和尊重的社区。

贡献

如果您在使用此后端时遇到问题,请将其记录在 GitHub 上。如果您想贡献代码,请分叉代码提交拉取请求

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

rubicon-java-0.2.6.tar.gz (83.5 kB 查看哈希

已上传 source

内置分布

rubicon_java-0.2.6-py3-none-any.whl (25.8 kB 查看哈希

已上传 py3