跳转到主要内容

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

项目描述

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

Rubicon-Java

Python Versions Project version Project status License Build Status Discord server

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

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

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

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

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

快速入门

Rubicon-Java由三个组件组成

  1. 一个Python库,

  2. 一个JNI库,以及

  3. 一个Java JAR文件。

已提供了一个 Makefile 来编译JNI和JAR组件。输入

$ make

以编译它们。编译输出将放置在 build 目录中。

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

  1. rubicon.jar 在您启动Java VM时在类路径中。

  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按钮,并且你想响应用户的按钮点击

>>> 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开发工具包(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. 安装tox

    (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上记录。如果您想贡献代码,请Fork代码提交一个Pull请求

项目详情


下载文件

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

源分布

rubicon-java-0.2.6.tar.gz (83.5 kB 查看散列值)

上传时间

构建分布

rubicon_java-0.2.6-py3-none-any.whl (25.8 kB 查看散列值)

上传时间 Python 3

由以下支持